我们来看看这两个函数:
std::string get_string()
{
std::string ret_value;
// Calculate ret_value ...
return ret_value;
}
void process_c_string(const char* s)
{
std::cout << s << endl;
}
这是两个可能的调用process_c_string
参数返回为get_string
.
-
没有将 const 引用绑定到返回的对象get_string
.
process_c_string(get_string().c_str());
-
将 const 引用绑定到返回的对象get_string
.
const std::string& tmp_str = get_string();
process_c_string(tmp_str.c_str());
我知道第二种方法是有效的,但是第一种方法呢,标准对此案例有何规定?返回的临时对象是否会get_string
之前被删除process_c_str
完成,因为没有const reference
to it?
Note:这两个版本在MSVC中都可以。
临时变量的生命周期延长了创建它的完整表达式的长度。在你的情况下,临时的将被销毁,但只有在调用之后process_c_string
完成。只要函数不存储指针供以后使用,就可以了。
在第二种情况(引用的绑定)中,该临时对象的生命周期被扩展为引用的范围,但我建议在这种特殊情况下不要使用这种模式。通过创建使用临时变量初始化的本地字符串可以获得相同的效果,并且代码更简单。 (从性能的角度来看,所有编译器都消除了代码中潜在的额外副本,因此成本是相同的)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)