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キーワードによって禁止されています。