考虑函数f
void f(const std::string& s) {
...
}
使用如下所示的固定字符串调用f是否安全:
f("abc");
答案 0 :(得分:8)
从std::string
隐式构建的"abc"
的生命周期直到对f()
的调用结束。只要你在f()
结束后没有在其他地方保留该引用,就完全安全了。
std::string const *pstr;
void f(std::string const &s)
{
s.length(); // safe. s has an instance backing
// it for the lifetime of this function.
pstr = &s; // still technically safe, but only if you don't
// dereference pstr after this function completes.
}
f("abc");
pstr->length(); // undefined behavior, the instance
// pstr pointed to no longer exists.
答案 1 :(得分:2)
假设你没有在某个地方存储一个引用或指针,并希望它从函数返回时仍然存在,它应该没问题:当调用该函数时,临时std::string
在函数执行的时候创建它。
答案 2 :(得分:0)
如果在函数返回后不使用它,那将是安全的。
正因为如此,使用它来初始化另一个字符串对象(在函数返回之前)也是安全的,即使这个字符串对象的寿命更长(并且使用的时间更长)。