构造一个对象可以有多种方法,有一种构造用到了隐式转换规则,请看一段代码:
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 = na