#include <iostream>
using namespace std;class Base {
public:Base(const char* s) { str = s; cout << "Base" << endl;}Base(const Base&) = delete;
private:const char* str;
};int main()
{Base d = "123";
}
上述代码直接将字符串赋给了Base对象,为什么编译还能通过呢?
这是因为这是复制初始化过程,不能当作赋值过程,只要存在从字符串类型到Base类型的构造函数就能直接构造对象,但是复制初始化不考虑 explicit 构造函数,因此以下代码会报错:
#include <iostream>
using namespace std;class Base {
public:explicit Base(const char* s) { str = s; cout << "Base" << endl;}Base(const Base&) = delete;
private:const char* str;
};int main()
{Base d = "123";
}