请考虑这三个功能。
std::string get_a_string()
{
return "hello";
}
std::string get_a_string1()
{
return std::string("hello");
}
std::string get_a_string2()
{
std::string str("hello");
return str;
}
有什么想法吗?
最佳答案
在前两种情况下,将进行RVO优化。 RVO是旧功能,大多数编译器都支持它。最后一种情况就是所谓的NRVO(命名为RVO)。这是C++的相对较新的功能。 Standard允许但不要求实现NRVO(以及RVO),但是一些编译器支持它。
您可以在Scott Meyers的More Effective C++. 35 New Ways to Improve Your Programs and Designs书的第20条中阅读有关RVO的更多信息。
Here是有关Visual C++ 2005中NRVO的很好的文章。
关于c++ - 了解返回值优化和返回临时变量-C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1394229/