c++:explicit关键字
简介
在C++中,explicit
关键字用于修饰类的构造函数,以防止编译器进行隐式类型转换。它只能用于类内部的构造函数声明中。当一个构造函数被声明为explicit
时,它只能用于显式构造对象,而不能用于隐式转换。
在C++中,如果构造函数只有一个参数(或者有多个参数,但除了第一个参数外都有默认值),那么它就是一个转换构造函数。在没有explicit
关键字的情况下,编译器可能会使用这种构造函数进行隐式转换,这有时会导致一些难以发现的错误。使用explicit
关键字可以避免这种隐式转换,从而要求程序员必须显式地调用构造函数。
示例
class MyString {
public:// 非explicit构造函数,允许隐式转换MyString(int size) {// 根据大小创建字符串}
};void display(const MyString& str) {// 显示字符串
}int main() {// 这里可以隐式转换:将int转换为MyString对象display(10); // 编译器会调用MyString(10)来创建一个临时对象
}
在上面的代码中,display
函数需要的是一个MySt