📅  最后修改于: 2023-12-03 15:10:30.920000             🧑  作者: Mango
在 C++ 中,关键字 explicit
可以用来修饰类的构造函数,包括普通构造函数和转换构造函数。其含义如下:
当一个构造函数被标记为 explicit
时,在使用该构造函数进行对象的隐式类型转换时,编译器会禁止这种转换。只有在进行显式转换的时候,才会使用该构造函数进行对象的创建。
下面是一个简单的示例代码,演示了如何使用 explicit
关键字:
class MyString {
public:
MyString(int n); // 普通构造函数
explicit MyString(char* s); // 转换构造函数
}
int main()
{
MyString str1 = 10; // OK,使用普通构造函数
MyString str2 = "Hello"; // 编译错误,禁止隐式类型转换
MyString str3("World"); // OK,使用转换构造函数
return 0;
}
在该示例代码中,MyString
类具有两个构造函数,其中一个是普通构造函数,另一个是转换构造函数,分别用来创建 MyString
类型的对象。在 main
函数中,创建了三个 MyString
类型的对象,其中 str1
对象使用了普通构造函数进行创建,而 str2
对象使用了转换构造函数,且在该语句中使用了隐式类型转换,因此编译器会报错。为了解决这个问题,可以将转换构造函数标记为 explicit
,如下:
class MyString {
public:
MyString(int n);
explicit MyString(char* s); // 指定为转换构造函数
}
int main()
{
MyString str1 = 10; // OK,使用普通构造函数
MyString str2 = "Hello"; // 编译错误,禁止隐式类型转换
MyString str3("World"); // OK,使用转换构造函数
return 0;
}
结果,编译器会禁止隐式类型转换,因此程序的正确性得到了保证。
使用 explicit
关键字可以避免类构造函数的隐式类型转换,防止出现错误。在编写程序时,程序员可以根据实际情况选择是否使用该关键字,以避免程序出现问题。