这是来自return语句中的Calling构造函数的后续问题.
这是一个操作员在课堂上过载的乐趣.
const Integer operator+(const Integer& IntObject)
{
cout << "Data : " << this->data << endl;
return Integer(this->data + IntObject.data);
}
Run Code Online (Sandbox Code Playgroud)
const在这些函数的返回类型中的相关性是什么?
int main()
{
Integer A(1); //Create 2 object of class Integer
Integer B(2);
const Integer C = A + B; //This will work
Integer D = A + B; //This will also work
fun(A + B); //Will work
}
void fun(Integer F) {}
Run Code Online (Sandbox Code Playgroud)
这是由于NRVO而在返回步骤期间不创建临时情况的情况.要返回的对象直接构造在被调用者的地址上.
这是一个更好的例子:
struct Foo
{
void gizmo();
Foo const operator+(Foo const & rhs);
};
Run Code Online (Sandbox Code Playgroud)
现在,如果你有Foo x; Foo y;,那么你不能说:
(x + y).gizmo(); // error!
Run Code Online (Sandbox Code Playgroud)
常量返回值意味着您不能将其用于非常量操作.对于原始类型,这并不是那么相关,因为您可以对临时对象执行的非常量操作不多,因为临时对象上++不允许进行大量"有趣"操作(如前缀 - ).
也就是说,使用C++ 11,我们应该尝试采用永不返回常量值的新惯用法,因为非常量值现在可以移动优化.