C++ | 关键字 explicit

发布时间 2023-09-22 16:59:24作者: C111-CR

假如有一个类如下:

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;
    }
};