为什么主要编译的第一行而第二行不编译?我认为两者都是临时性的,但一个被视为l值而另一个不被视为......
class complex
{
public:
complex() : r(0),i(0) {}
complex(double r_, double i_) : r(r_), i(i_)
{
}
private:
double r;
double i;
};
int main()
{
complex(2,2) = complex(1,2);
char() = char(2);
}
Run Code Online (Sandbox Code Playgroud)
在类类型上,赋值运算符是成员函数。也就是说,a = b只是 的合成糖a.operator=(b)。在临时对象上调用成员函数是完全可以的。
请注意,在 C++ 中,术语左值与赋值的左侧无关。正如您的示例所示,分配给类类型的右值是完全可以的。此外,还有一些无法分配的左值,例如数组和/或常量,尤其是字符串文字。
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |