这会在返回时复制还是编译器会做一些魔术?什么是神奇的共享堆栈空间?
string getCamel()
{
string s = "Camel";
return s;
}
main()
{
string myStr = getCamel();
}
答案 0 :(得分:1)
编译器可以执行" magic"直接在返回时分配给的变量中构造字符串。这被称为" copy elision"和"返回值优化"。允许这样做,虽然不是必需的(直到C ++ 17,在某些情况下需要 )。
使用C ++ 11及更高版本,编译器还可以选择"移动"如果类型具有移动构造函数,则变量进入目标 - 比复制成本更低,但仍然比仅仅忽略操作并直接在目标中构建更昂贵。
有关详细信息,请参阅这些参考资料:
http://en.cppreference.com/w/cpp/language/copy_elision