假设我有一个琐碎的课程:
class Temp {
private:
int vals;
public:
Temp():vals(0);
Temp(int x):vals(x);
Temp& someFunc(const Temp& t);
};
并说someFunc
有一个条件,它会调用以下内容:
return Temp null_t; // not allowed for some reason
然而,这有效(正如预期的那样):
Temp null_t;
return null_t;
为什么我不能在与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
}
答案 0 :(得分:8)
如果你的函数是按值返回的(即Temp someFunc(const Temp&)
,那么你可以只使用一个实际的临时变量,而不是一个命名变量(这不是暂时的):
return Temp();
如果返回类型不是具有显式默认构造函数的类类型,您还可以说:
return {};
但是,既然你想要返回一个左值(“返回一个引用”),那么返回(引用)一个临时值也没有意义,返回(引用)你的意义也没有意义null_t
,因为两者都不会活得足够长,返回值会立即失效。函数调用只能引用函数返回时仍然存在的东西。
答案 1 :(得分:6)
为什么我不能在返回的同一行中调用默认构造函数?
嗯,你其实可以:
return Temp{};