zoukankan      html  css  js  c++  java
  • 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只能用于类内部构造函数的声明。它虽然能避免隐式类型转换带来的问题,但需要用户能够显式创建临时对象(对用户提出了要求)。
  • 相关阅读:
    Jvm性能监控和常用工具
    JVM内存分配和回收策略
    从ExtensionLoader理解Dubbo扩展机制
    类的加载和双亲委派模型
    截器和过滤器的区别
    Struts2的工作原理
    Action
    StrutsPrepareAndExecuteFilter
    单例模式
    Web工作原理
  • 原文地址:https://www.cnblogs.com/LearningTheLoad/p/6828613.html
Copyright © 2011-2022 走看看