【发布时间】:2016-12-25 19:36:15
【问题描述】:
这会在返回时进行复制还是编译器会做一些魔术?什么是神奇的共享堆栈空间?
string getCamel()
{
string s = "Camel";
return s;
}
main()
{
string myStr = getCamel();
}
【问题讨论】:
-
副本可以省略,不需要。
-
This 看起来像你要找的东西
-
从C++11开始,不能有拷贝,只有可选的移动构造函数。
-
@aschepler 否。仅从 C++17 开始保证复制省略(在某些情况下)。对于 C++11 编译器进行复制仍然是完全有效的(即使它可以删除复制或移动) - 但现代编译器会努力删除或移动。
-
@JesperJuhl 不,当您
return使用命名局部变量的标识符时,编译器必须在复制构造函数之前搜索移动构造函数。 C++14 12.8/32.
标签: c++