c++ - 左值引用绑定(bind)到按值返回会崩溃吗?

标签 c++ visual-studio

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/

相关文章:

c++ - C++中错误的计算方法

c++ - 如何在不遍历的情况下获取优先级队列的最后一个元素

c++ - Visual Studio 2010 中的外部库

visual-studio - NuGet 的默认包源默认为新添加的源,而不是 All 或 nuget.org

visual-studio - 在 Azure Analysis Services 中使用 ODBC 连接打开 Pbix 文件

c++ - 在 C++ 中读取文件、搜索和显示信息到结构数组的问题

c++ - 在 ID3DBlob 中初始化 PS 的 DirectX11 CreatePixelShader 中出现访问冲突

.NET Windows 7 特定错误

c++ - 遍历 2.5D 网格

visual-studio - ctrl +//切换 "comment"