可能重复:
了解返回值优化和返回临时值 - C++
让我们Integer
成为某个班级i
的成员。left
并且right
作为参数传递给函数调用并且是类型Integer
现在正如 Bruce Eckel 中给出的那样。
代码 1:
return Integer(left.i+right.i);
代码 2:
Integer tmp(left.i+right.i);
return tmp;
代码 1 说创建一个临时整数对象并返回它,它不同于创建一个命名的局部变量并返回它,这是一个普遍的误解。
在代码 1 中(称为返回临时方法):
编译器知道您对它创建的对象没有其他需要,然后返回它。编译器通过building the object directly into the location of the outside return value
. 这只需要一个普通的构造函数调用(没有复制构造函数)并且不需要析构函数,因为没有创建本地对象。
虽然代码 2 中会发生 3 件事:
a) 创建 tmp 对象,包括其构造函数调用
b) the copy-constructor copies the tmp to the location of the outside return value
。
c) 在作用域结束时为 tmp 调用析构函数。
在代码 1 中这是什么意思:building the object directly into the location of the outside return value
?
还有为什么在代码 1 中不会调用复制构造函数?
另外我不明白代码2中的步骤b在做什么?即the copy-constructor copies the tmp to the location of the outside return value
。