请考虑这三个功能。

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优化。 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/

    10-12 17:32