我一直在阅读有关 (N)RVO 的内容,并且想要一份完整的场景描述。我希望这个问题能帮助其他 C++ 学习者澄清他们的想法。
假设这种情况:
string get_string() {
string x("racecar");
//work on x...
return x;
}
string a( get_string() );
string b = get_string();
请暂时忽略 C++11 移动语义。
- 如果不执行 (N)RVO,将执行多少个构造函数/赋值/析构函数?(请指出它们所指的对象)
- 如果应用 (N)RVO,会发生什么变化?
- 最后,假设
std::string
支持移动语义的 C++11 中的情况如何变化。