C++ explicit关键字的作用主要是用来修饰类的构造函数,表明该构造函数是显式的,禁止单参数构造函数的隐式转换。
如果C++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示:
class MyClass
{
public:
MyClass(int num);
}
MyClass obj = 10; //ok, convert int to MyClass
上面的代码中编译器自动将整型转换为MyClass类对象,实际上等同于下面的操作:
MyClass temp(10);
MyClass obj = temp;
上面的所有的操作即是所谓的“隐式转换”。
如果要避免这种自动转换的功能,可以在声明构造函数的时候前面添加上explict关键字,将类的构造函数声明为“显示”,这样就可以防止这种自动的转换操作。
修改上面的MyClass类的构造函数为显示的,下面的代码将不能够编译通过,如下所示:
class MyClass
{
public:
explicit MyClass(int num);
}
如果C++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示:
class MyClass
{
public:
MyClass(int num);
}
MyClass obj = 10; //ok, convert int to MyClass
上面的代码中编译器自动将整型转换为MyClass类对象,实际上等同于下面的操作:
MyClass temp(10);
MyClass obj = temp;
上面的所有的操作即是所谓的“隐式转换”。
如果要避免这种自动转换的功能,可以在声明构造函数的时候前面添加上explict关键字,将类的构造函数声明为“显示”,这样就可以防止这种自动的转换操作。
修改上面的MyClass类的构造函数为显示的,下面的代码将不能够编译通过,如下所示:
class MyClass
{
public:
explicit MyClass(int num);
}
本文详细介绍了C++中explicit关键字的使用方法及其作用。通过一个具体的例子解释了如何使用explicit关键字来禁止单参数构造函数的隐式转换,帮助读者更好地理解和运用这一特性。
3万+

被折叠的 条评论
为什么被折叠?



