我定义了一个普通的T类:
class T {
public:
T() { cout << "default constructor " << this << "\n" }
T(const & T a) { cout <<"constructor by copy " << this << "\n"}
~T() { cout << "destructor "<< this << "\n"}
T & operator=(T & a) {
cout << " assignemnt operator :" << this << " = " << &a << endl;}
};
有4个功能,其中一个是错误的:
T f1(T a){ return a; }
T f2(T &a){ return a; }
T &f3(T a){ return a; }
T &f4(T &a){ return a; }
有谁知道哪一个错了?
答案 0 :(得分:5)
f3
错误,因为它返回对本地对象的引用。
复制按值传递的参数。它们的副本是传递给它们的函数的本地副本 - 一旦函数返回它们就会超出范围。