为什么 C++ 类可以等于一个变量

我有这个代码:

#include <iostream>
using namespace std;

class complex
{
    double re;
    double im;

public:
    complex(): re(0), im(0) {}
    complex(double x) {re = x, im = x;}
    complex(double x, double y) {re=x, im =y;}
    void print() {cout << re << " " << im;}
};

int main()
{
    complex c1;
    double i=2;
    c1 = i;
    c1.print();

    return 0;
}

我的问题是,为什么这一行中的代码会编译。

c1 = i;

编译器没有给出错误(或警告),为什么?

回答

让我们看看在生产线上发生了什么。

c1 = i;

发生的事情是operator=调用 for class complex,在这种情况下,它是隐式定义的。

c1 = i;

所以它const complex&作为参数,可以绑定到 type 的右值complex,然后编译器搜索是否有接受double参数的构造函数,因此表达式被解析为。

c1 = complex(i);

显然,这可以执行。


以上是为什么 C++ 类可以等于一个变量的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>