C++隐式类类型转化

隐式类类型转换:可以用 单个形参来调用 的构造函数定义了从 形参类型 到 该类类型 的一个隐式转换

 

 1 class Person
 2 {
 3 public:
 4     Person(string name,int age = 10): mName()name, mAge(age){};
 5     bool isSameName(const Person & person){
 6         return person.mName == mName;
 7 }
 8 private:
 9     string mName;
10     int      mAge;
11 }    
12 int main()
13 {
14     Person A(A-A-A);
15     Person B(B-B-B);
16     cout<<A.isSameName<<endl;//正常调用
17     cout<<String(A-A-A)<<endl;//调用隐式类类型转换 传进参数稳string类型然而isSaneName()的参数为Person类型 
//即string 调用了Person默认构造函数 以满足isSameName的函数期待
18 19 system("pause"); 20 }

用explicit可以避免以上现象发生

总结

  1.   可以使用一个实参进行调用,不是指构造函数只能有一个形参
  2.   隐式类类型转换容易引起错误,除非你有明确理由使用隐式类类型转换,否则,将可以用一个实参进行调用的构造函数都声明为explicit。
  3.       explicit只能用于类内部构造函数的声明。它虽然能避免隐式类型转换带来的问题,但需要用户能够显式创建临时对象(对用户提出了要求)。

 

posted @ 2017-05-09 00:08  WangZijian  阅读(190)  评论(0编辑  收藏  举报