use*_*623 0 c++ return local effective-c++
众所周知,由于作用域,从C++中的函数返回局部变量是不安全的.在Effective C++第三版中,Scott Meyers在第21页的第21项中讲述了这个问题.然而,最后他说,正确的决定将是:
inline const Rational operator*(const Rational& lhs, const Rational& rhs) {
return Rational(lhs.n * rhs.h, lhs.d * rhs.d);
}
Run Code Online (Sandbox Code Playgroud)
这不是一个坏习惯,这个功能不安全吗?
UPD:谢谢大家的解释.
您实际上无法返回局部变量.您可以返回局部变量的值,或指向它的指针(即其地址)或对它的引用.
返回局部变量的值是非常安全的:
int good_func() {
int local = 42;
return local; // returns a copy of the value of "local"
}
Run Code Online (Sandbox Code Playgroud)
返回指向本地变量的指针或引用是不安全的,因为当函数终止时变量不再存在:
int* bad_func() {
int local = 42;
return &local; // returns a pointer to "local"
}
Run Code Online (Sandbox Code Playgroud)
(这同样适用于C,除了C没有C++风格的引用.)