4

我一直想知道如果我通过引用从方法返回某些东西是否是有效的 C++,而该方法实际上被声明为按值返回:

class A {
public:
    int method(){
        int i = 123;
        int& iref = i;
        return iref;
    }
};

这编译得很好,似乎工作。据我了解,这应该按值返回,如方法签名中所声明的那样。我不想最终返回对局部变量的引用。有谁知道这是否是没有陷阱的“正确的 c++ 代码”?

4

2 回答 2

6

这是一个完全有效的 C++ 代码,并且完全符合您的预期:

  • 有一个局部变量
  • 对该局部变量有一个局部引用
  • 复制本地引用所引用的变量
  • 将该副本返回给调用者(展开堆栈,销毁局部变量和对它的引用)

不用担心,您最终不会以这种方式返回对局部变量的引用。

于 2012-08-04T18:21:33.810 回答
4

代码很好,它将按值返回一个 int 值i

于 2012-08-04T18:18:13.717 回答