构造一个对象可以有多种方法,有一种构造用到了隐式转换规则,请看一段代码:
class MyClass {
string m_name;
public:
MyClass(const char *name) {
m_name = name;
}
const string &name() const { return m_name; }
};
void tmyclass() {
MyClass first("one");
MyClass second = "two";
}
这里定义了一个类MyClass,其有一个构造函数接受一个C风格的字符串,测试函数tmyclass中的两种构造方法都是正确的,值得注意的是second对象的构造包含了隐式转换规则,实际上它是先从字符串构造一个临时对象(因为其有相应的构造函数),再调用类的拷贝构造函数(此处采用编译器默认提供的)来构造该对象。有时候我们不希望看到这样的代码,因为它可能造成代码阅读上的困惑,于是C++引入了explicit关键字,用以修饰构造函数,相应的构造函数称之为显式构造函数。加上explicit关键字后代码如下:
class MyClass {
string m_name;
public:
explicit MyClass(const char *name) {
m_name = name;
}
const string &name() const { return m_name; }
};
void tmyclass() {
MyClass first("one");
MyClass second = "two";
}

本文介绍了C++中的显式构造函数(explicit)及其作用。通过示例代码展示了如何使用explicit关键字防止隐式类型转换,从而提高代码可读性和避免潜在的错误。
最低0.47元/天 解锁文章
5855

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



