MSVC 正在接受此代码段
#include <iostream>
#include <string>
#include <vector>
std::string retstr() {
return std::string("HelloWorld");
}
void callFunc(std::string& ref) {
std::cout << ref;
}
int main()
{
callFunc(retstr());
}
出于某些向后兼容性的原因。
现在..我在一个函数的DLL中遇到了一些崩溃,该函数的工作方式与上面的代码片段完全相同:编译器没有警告我有一个左值引用绑定(bind)到按值转帐的东西。
我的问题是:这可能不是标准的,但它会导致程序崩溃(准确地说是访问冲突)吗?
最佳答案
就生命周期而言,编写的代码很好,因为临时值 retstr()
存活到完整表达式的末尾,因此它的存活时间与函数调用的时间一样长。
MSVC 允许将左值引用绑定(bind)到右值这一事实并没有改变这一点。与往常一样,您必须确保callFunc
在函数调用持续时间之外,不会将引用存储到字符串中。
关于c++ - 左值引用绑定(bind)到按值返回会崩溃吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34286871/