c ++返回局部变量的const引用

gen*_*sys 0 c++ const inline reference

是否可以/ ok返回一个const引用,即使函数返回的值是该函数的局部变量?我知道一旦函数返回,本地函数就不再有效 - 但如果函数是内联的并且返回的值仅在调用者范围内使用,该怎么办?然后函数的本地应该包含在调用者堆栈框中,不是吗?

dic*_*oce 8

不要指望它.即使这适用于1个编译器,它也不是标准的支持行为,并且可能会破坏其他编译器.


Mar*_*ski 6

不,不行.局部变量在堆栈上声明,并且堆栈在方法调用之间不断变化.此外,超出范围的对象也会被破坏.始终返回局部变量的副本.

考虑以下代码:

#include <iostream>
using namespace std;

class MyClass
{
public:
  MyClass() { cout << "ctor" << endl; }
  ~MyClass() { cout << "dtor" << endl; }
  MyClass(const MyClass& r) { cout << "copy" << endl; }
};

const MyClass& Test()
{
  MyClass m;
  return m;
}

int main()
{
  cout << "before Test" << endl;
  MyClass m = Test();
  cout << "after Test" << endl;
}
Run Code Online (Sandbox Code Playgroud)

这将打印出来:

before Test
ctor
dtor
copy
after Test
dtor
Run Code Online (Sandbox Code Playgroud)

您尝试复制的对象已调用其析构函数,可能处于无效状态.