构造函数用于赋值

当类中没有重载赋值运算符时,构造函数可用于赋值

#include 
using namespace std;

class SmallInt
{
    int val;
public:
    SmallInt(int i = 0) : val(i) { cout << "int initial" << endl; }
    operator int() const
    {
        cout << "Int_transform" << endl;
        return val;
    }
};

int main()
{
    SmallInt i;
    i = 4;
    i = i + 3;
    return 0;
}

输出结果为:

int initial
int initial
Int_transform
int initial

当在SmallInt中加上

SmallInt& operator= (int i)
    {
        cout << "using = ..." << endl;
        val = i;
        return *this;
    }

输出结果为:

int initial
using = ...
Int_transform
using = ...

可见此时使用=,不再使用构造函数了

这也解释了为什么赋值运算符不能作为友元函数重载:
当重载为友元函数时,编译器会认为类中没有赋值运算符而调用构造函数,而全局中实际上有一个友元的重载,调用时两者会产生矛盾。

你可能感兴趣的:(c++)