C++におけるexplicitの役割は何ですか?

C++において、explicitキーワードは単一引数のコンストラクタに修飾され、暗黙的な変換を禁止する役割があります。explicitで宣言されたコンストラクタは明示的にのみ呼び出すことができ、他の型への暗黙的な変換はできません。

Explicit修饰构造函数的使用可以避免一些潜在的错误和意外行为,确保类型转换的显式性和安全性。隐式转换的禁止可以减少代码中的歧义和误解,提高代码的可读性和可维护性。

explicitキーワードを使用した例は次のとおりです:

class MyClass {
public:
    explicit MyClass(int value) {
        // 构造函数的实现
    }
};

void func(MyClass obj) {
    // 函数的实现
}

int main() {
    MyClass obj1(10); // 直接调用构造函数
    MyClass obj2 = 20; // 错误,禁止隐式转换
    func(obj1); // 正确,显式调用构造函数
    func(30); // 错误,禁止隐式转换
    return 0;
}

上記の例では、MyClassのコンストラクタにexplicitキーワードが使用され、暗黙的な変換が禁止されています。main関数では、obj1の構築は正しく、コンストラクタが明示的に呼び出されているためです。一方、obj2とfunc(30)の構築は間違っており、暗黙的な変換を試みているため、explicitキーワードによって禁止されています。

bannerAds