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