假如有一个类如下:
class point{
public:
int x, y;
Point(int _x = 0, int _y = 0){
x = _x, y = _y;
}
};
如果以下面两种方式初始化该类的对象:
void displayPoint(const point & p){
printf("(%d,%d)\n", p.x, p.y);
}
void main(){
displayPoint(1);
ponit p = 1;
}
都将通过编译且运行成功。这就是构造函数的隐式调用(如果构造函数没有使用默认参数,那无法通过编译)
这种隐式调用构造函数有时候会导致意想不到的后果,所以便出现了explicit
关键字,来禁止构造函数使用隐式构造。
改进后的point
类:(仅仅在构造函数前加入explicit
关键字)
class point{
public:
int x, y;
explicit Point(int _x = 0, int _y = 0){
x = _x, y = _y;
}
};
标签:point,int,explicit,C++,关键字,隐式,构造函数
From: https://www.cnblogs.com/C111111/p/17722869.html