临时对象¶
参考:
临时对象的创建有如下原因:
- 要初始化一个
const
引用,但是其初始化器的类型不同于引用的基础类型 -
存储返回用户定义类型的函数返回值
-
只有当程序不会将返回值复制到对象时,才会创建这些临时文件
// 函数声明,使用自定义类型作为返回值 UDT Func1(); ... // 调用该函数,不接受返回值。此时编译器创建一个临时对象来保存返回值 Func1();
-
创建临时变量的更常见情况是在表达式的计算过程中,必须调用重载的运算符函数。这些重载的运算符函数返回一个用户定义的类型,该类型通常不会复制到另一个对象
class Complex { public: Complex(int num) : num(num) {} Complex operator+(Complex &other) { return Complex{this->getNum() + other.getNum()}; } int getNum() { return num; } private: int num; }; int main() { Complex complex1(1), complex2(2), complex3(3); // complex1和complex2的加法结果被存储在一个临时对象tmp中 // tmp再继续和complex3进行加法计算,将结果复制到result Complex result = complex1 + complex2 + complex3; cout << result.getNum() << endl; }
-
-
将强制转换的结果存储到用户定义的类型。当给定类型的对象显式转换为用户定义的类型时,该新对象将被构造为临时对象