C++におけるexplicitの効果や使い方は何ですか?

C++において、explicit キーワードはクラスの単一引数コンストラクタを修飾するために使用され、暗黙的な型変換を防ぐ効果があります。使用法は以下の通りです。

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

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

上記のコードでは、explicitキーワードがMyClassのコンストラクタに修飾されており、その結果、そのコンストラクタは暗黙的に呼び出すことができません。そのため、整数値を直接MyClass型のオブジェクトに割り当てると(例えば、MyClass obj2 = 10;)、コンパイルエラーが発生します。ただし、明示的な呼び出しを使用してオブジェクトを作成することは可能です(例えば、MyClass obj3 = MyClass(15);)。

explicitキーワードを使用すると、いくつかの予期しない暗黙の変換を避けることができ、プログラムの可読性と安全性が向上します。特に、単一の引数を持つコンストラクターでexplicitキーワードを使用すると、コンパイラーによる暗黙の変換を防ぐことができます。

bannerAds