zoukankan      html  css  js  c++  java
  • 转换分配C++ explicit关键字

    PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,码代几天不写就忘。目前又不当COO,还是得用心记码代哦!

        在C++ primer 4th的第394讲解了explicit这个关键字,面上就是我的学习心得。

        按照认默定规,只有一个参数的构造数函也定义了一个隐式转换,将该构造数函对应数据类型的数据转换为该类象对,如面上所示:

        

    1. class MyClass  
    2. {  
    3. public:  
    4. MyClass( int num );  
    5. }  
    6. //.  
    7. MyClass obj = 10; //ok,convert int to MyClass 

        

    在面上的码代中编译器主动将整型转换为MyClass类象对,实际上等同于面上的作操:

    1. MyClass temp(10);  
    2. MyClass obj = temp

        

    面上的有所的C++ explicit关键字相干的作操等于所谓的"隐式转换"。

        

        

        

    但是有的时候可能会不需要种这隐式转换,如下:

        

    class String {

        

           String ( int n ); //本意是事后分配n个节字给字符串

        

           String ( const char* p );  // 用C风格的字符串p作为初始化值

        

    //…

        

    }

        

     

        

    面上两种写法较比常正:

        

    String s2 ( 10 );   //OK 分配10个节字的空字符串                 直接调用数函

        

    String s3 = String ( 10 ); //OK 分配10个节字的空字符串     直接调用数函

        

     

        

    面上两种写法就较比惑疑了:

        

    String s4 = 10; //编译通过,也是分配10个节字的空字符串     隐式转换:String temp=String(10);  String sv=temp
        每日一道理
    如果你们是蓝天,我愿做衬托的白云;如果你们是鲜花,我愿做陪伴的小草;如果你们是大树,我愿做点缀的绿叶……我真诚地希望我能成为你生活中一个欢乐的音符,为你的每一分钟带去祝福。

        

    String s5 = ‘a’; //编译通过,分配int(‘a’)个节字的空字符串   隐式转换:String temp=String('a');  String sv=temp

        

     

        

    s4 和s5 分别把一个int型和char型,隐式转换成了分配干若节字的空字符串,轻易人令误会。

        

    为了避免种这错误的生发,我们可以声明表现的转换,应用 explicit 关键字:

        

    class String {

        

                        explicit String ( int n ); //本意是事后分配n个节字给字符串

        

                      String ( const char* p );  // 用C风格的字符串p作为初始化值

        

    //…

        

    }

        

    加上 explicit,就克制了String ( int n )的隐式转换,

        

     

        

    面上两种写法仍然准确:

        

    String s2 ( 10 );   //OK 分配10个节字的空字符串

        

    String s3 = String ( 10 ); //OK 分配10个节字的空字符串

        

     

        

    面上两种写法就不许允了:

        

    String s4 = 10; //编译不通过,不许允隐式的转换

        

    String s5 = ‘a’; //编译不通过,不许允隐式的转换

        

     

        

    因此,某些时候, explicit 可以效有得避免构造数函的隐式转换带来的错误或者误会

        

        

        参考文献:http://www.360doc.com/content/13/0508/15/12269514_283890361.shtml   

                     http://www.cnblogs.com/cutepig/archive/2009/01/14/1375917.html

        

    文章结束给大家分享下程序员的一些笑话语录: 姿势要丰富,经常上百度!

  • 相关阅读:
    php-数据类型
    php常量
    php变量
    loadrunner11安装教程
    ThumbProcess.exe错误的解决方法
    jmeter 测试MD5加密登录接口
    jmeter 上传附件脚本报Non HTTP response code: java.io.FileNotFoundException
    jmeter中提取json串
    Jmeter 非 GUI 命令行执行脚本文件
    jmeter 报错Error in NonGUIDriver java.lang.IllegalArgumentException: Report generation requires csv output format, check 'jmeter.save.saveservice.output_format' property
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3067725.html
Copyright © 2011-2022 走看看