正确返回对局部变量的const引用

x29*_*29a 2 c++ qt

此外到答案1,2,3和GotW88,假设以下的方法

QString createString()
{
    return QString("foobar");
}

const QString& getString()
{
    return createString();
}
Run Code Online (Sandbox Code Playgroud)

这将产生VS2013着名的"警告C4172:返回本地变量或临时变量的地址".

现在,如果我改变了第二种方法

const QString& getString()
{
    const QString& binder = createString();
    return binder;
}
Run Code Online (Sandbox Code Playgroud)

哪个不再报告错误.这是一种安全的方法来修复警告而不改变API的签名吗?为什么这样做?

AnT*_*AnT 7

它不起作用.这样你就可以通过使情况更难分析来抑制警告.行为仍未定义.

  • QString实现了一个移动构造函数,因此您可以按值返回它,而不必担心性能. (3认同)