Toc*_*cio 1 c++ constructor temporary rvalue
假设我有一个名为Foo的类,带有复制赋值运算符,我认为这样:
Foo() = Foo();
Run Code Online (Sandbox Code Playgroud)
是不被允许的,因为我认为(对不起,再次)Foo()是一个右值(所以我不能分配给它),是一个临时对象.显然,我试图使这个代码工作,它正常工作,显示一些字符串,以验证我的程序正确使用复制赋值运算符.
我错了吗?或者这是一种错误?有什么用处?
Foo() 是一个rvalue,这是肯定的.
但表达式Foo() = Foo()相当于Foo().operator=(Foo()).即使Foo()是rvalue,您仍然可以在其上调用成员函数,甚至是修改它的成员函数.
当然,在作业的左侧不允许使用基本类型的右值.在这方面,基本类型与用户定义类型的处理方式不同.
这就是为什么在C++中,"左值"不应该被定义为"可以出现在赋值左侧的东西"!