为什么 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);
显然,这可以执行。