1. explicit使用
在C++中,explicit
是一个关键字,它用于防止C++的隐式类型转换。当你在单参数构造函数或者具有默认参数的多参数构造函数前面加上explicit
关键字时,你告诉编译器这个构造函数只能用于直接初始化,而不能用于隐式转换或复制初始化。
这是为了避免意外的类型转换,使得代码的意图更加明确,减少因为隐式转换引起的错误。
以下是explicit
的一些用法示例:
-
单参数构造函数:
class MyClass { public: explicit MyClass(int value) { // 构造函数的实现 } };
在这个例子中,MyClass
的构造函数只能用于直接初始化,如下所示:
MyClass obj(10); // 正确,直接初始化 MyClass obj = 10; // 错误,不能用于隐式转换
-
具有默认参数的多参数构造函数:
class MyClass2 { public: MyClass2(int a, int b = 0) : a_(a), b_(b) { // 构造函数的实现 } };
如果没有使用explicit
,那么下面的代码将会通过:
MyClass2 obj = 10; // 没有explicit时,会调用一参数构造函数
但是,如果你在构造函数前加上explicit
,上面的代码将会出错,因为隐式转换被禁止了。
-
转换构造函数:
class MyString { public: explicit MyString(const char* str) { // 构造函数的实现 } };
在这个例子中,MyString
的构造函数只能用作直接初始化,不能用于隐式转换或复制初始化:
MyString str("Hello"); // 正确 MyString str = &#