假设我有一个琐碎的课:
class Temp {
private:
int vals;
public:
Temp():vals(0);
Temp(int x):vals(x);
Temp& someFunc(const Temp& t);
};
Run Code Online (Sandbox Code Playgroud)
并说someFunc有一个条件,它将调用以下内容:
return Temp null_t; // not allowed for some reason
Run Code Online (Sandbox Code Playgroud)
然而,这是有效的(正如预期的那样):
Temp null_t;
return null_t;
Run Code Online (Sandbox Code Playgroud)
为什么我不能在与同一行中调用默认构造函数return?
编辑(someFunc实现):
Temp& Temp::someFunc(const Temp& rhs) {
if (this->vals == rhs.vals) {
// return a reference to an empty Temp object
*this = Temp(); // dereference, copy-assignment
return *this;
this->vals = rhs.vals
return *this
}
Run Code Online (Sandbox Code Playgroud)
如果你的函数是按值返回的(也就是说Temp someFunc(const Temp&),你可以只使用一个实际的临时函数,而不是一个命名变量(这不是临时的):
return Temp();
Run Code Online (Sandbox Code Playgroud)
如果返回类型不是具有显式默认构造函数的类类型,您还可以说:
return {};
Run Code Online (Sandbox Code Playgroud)
但是,既然你想返回一个左值("返回一个引用"),那么返回一个(引用)一个临时的,没有意义返回(引用)是没有意义的null_t,因为将活得足够长,返回值将立即无效.函数调用只能引用函数返回时仍然存在的内容.
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |