Vla*_*ala 7 c++ initialization class operator-overloading
我认为构造函数控制C++中的初始化和operator = functions控制赋值.那么为什么这段代码有效呢?
#include <iostream>
#include <cmath>
using namespace std;
class Deg {
public:
Deg() {}
Deg(int a) : d(a) {}
void operator()(double a)
{
cout << pow(a,d) << endl;
}
private:
int d;
};
int
main(int argc, char **argv)
{
Deg d = 2;
d(5);
d = 3; /* this shouldn't work, Deg doesn't have an operator= that takes an int */
d(5);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在main函数的第三行,我正在int为一个类的对象赋值Deg.由于我没有operator=(int)函数,我认为这肯定会失败......但是它会调用Deg(int a)构造函数.那么构造函数也可以控制赋值吗?
Jon*_*onM 18
这就是所谓的隐式类型转换.编译器将查看是否有一个构造函数可以直接从您分配的类型更改为您尝试分配的类型,并调用它.你可以通过explicit在你不想隐式调用的构造函数前添加关键字来阻止它发生,如下所示:
explicit Deg(int a) : d(a) {}