C++ 的 explicit 用法

2 阅读1分钟

explicit 是一个关键字,用于修饰单参数构造函数,以防止隐式类型转换发生。当一个构造函数被声明为 explicit 时,它将只能被显式调用,而不会被隐式调用。


  • 代码
#include <iostream>


class MyClass {
public:
    explicit MyClass(int x) {
        this->x = x;
    }

    void display() {
        std::cout << "Value: " << x << std::endl;
    }

private:
    int x;
};

int main() {
    // case 1: ok
    MyClass myClass =  MyClass(5);
    myClass.display();

    // case 2: ok
    MyClass obj2(10); // OK
    obj2.display();

    // case3 :不被允许
    // MyClass obj2 = 10; // Error: No implicit conversion allowed

    return 0;
}

总结

使用 explicit 关键字可以避免隐式转换带来的潜在问题,使代码更加清晰、可靠。尤其是在构造函数接收单个参数时,应尽量使用 explicit 关键字。