类内构造函数前缀explicit

发布时间 2023-06-04 21:31:41作者: Toriyung

只有一个参数的构造函数前面加上explicit,这样一来在创建对象时不会被转换类型,因调用构造函数时有explicit限制,如

class MyClass {
public:
    explicit MyClass(int value) : data(value) {
    }

    int getData() const {
        return data;
    }

private:
    int data;
};

int main() {
    MyClass obj1(5); // 直接调用构造函数进行对象创建
    MyClass obj2 = 10; // 错误,禁止隐式类型转换
    MyClass obj3 = static_cast<MyClass>(10); // 正确,显式类型转换

    return 0;
}