#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";
}