首页 > 解决方案 > 如何在 C++ 中创建临时变量

问题描述

我有一个函数返回对我的类“记录”实例的引用。

record& get_record(int key) {
    return lookup(key);
}

这是有效的,它返回一个引用而不是按值。现在我稍微修改一下。

record& get_record(int key) {
    if (valid(key))
        return lookup(key);
    else {
        record x;
        x.valid=false;
        return x; //Here I really want to return a temporary variable
                  // and not a reference to a local variable.      
    }
}

返回对局部变量的引用不是一个好主意是否正确?以及如何以使其成为临时变量的方式返回 x?

标签: c++referencetemporary

解决方案


返回对局部变量的引用不是一个好主意是否正确?

是的。退出函数时,本地对象将被销毁,因此返回的引用始终是悬空的。

你可能会做x一个static变量。

record& get_record(int key) {
    if (valid(key))
        return lookup(key);
    else {
        static record x;
        x.valid=false;
        return x;
    }
}

请注意,返回的引用将始终引用同一个对象,即x.


推荐阅读