编译器产生的临时对象

    技术2025-02-05  14

    class Rational1 { public: Rational1(int intPart= 1, int dotPart = 0) { intPart_ = intPart; dotPart_ = dotPart; } Rational1& operator=(const Rational1& src) { intPart_ = src.intPart_; dotPart_ = src.dotPart_; return *this; } private: int intPart_; int dotPart_; }; 

    1. 对象定义

    Rational r1(100);

    Rational r2 = Rational(100);

    Rational r3 = 100;

     

    2. 隐式类型转换

    Rational r; r = 100; 调用operator=时隐式调用 Rational1(int intPart= 1, int dotPart = 0) 构造

    void g(const string& s); g("safda"); 隐式调用 string(char*) 构造

     

    3. 传值传参,返回对象时

     

    总结:

    当传入值类型与定义值不符时,编译器会自行调用构造函数产生临时对象。

    1. 尽量用传引用或指针

    2. 重载相应函数,增加传入值类型。

    最新回复(0)