区分初始化,赋值
#include <iostream>
using namespace std; class Fi
{
public:
Fi() {}//1构造函数
}; class Fee
{
public:
Fee(int) {}//2构造函数
Fee(const Fi&) {}//3构造函数
}; void main()
{
Fee fee = ;//2构造函数
Fi fi;//1构造函数
Fee fum = fi;//3构造函数
fum = fi;//赋值 system("pause");
};
C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生。声明为explicit的构造函数不能在隐式转换中使用。
#include <iostream>
using namespace std; class One
{
public:
One() {}
}; class Two
{
public:
explicit Two(const One&) {}
}; void f(Two) {} void main()
{
One one; //f(one);//error C2664: “void f(Two)”: 无法将参数 1 从“One”转换为“Two” f(Two(one));//构造一个类Two system("pause");
};