博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转换分配C++ explicit关键字
阅读量:6812 次
发布时间:2019-06-26

本文共 1391 字,大约阅读时间需要 4 分钟。

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://sswzl.baihongyu.com/

你可能感兴趣的文章
《PHP对象、模式与实践》之对象
查看>>
ASP.NET入门五步详解
查看>>
树莓派 + Docker - 轻松实现人脸识别应用
查看>>
idoc 和 bapi 和 rfc 之间的区别
查看>>
浅析ASP.NET应用ViewState技术
查看>>
递归、非递归 反转单链表
查看>>
36.9. Round Robin Archives
查看>>
在word软件中使用MathType自动编号功能
查看>>
最小公约数(欧几里得算法&&stein算法)
查看>>
golang iris 富文本的显示问题
查看>>
[Java 8] (5) 使用Lambda表达式进行设计
查看>>
jQuery之合成事件
查看>>
记录安装oracle的那些事(五)之 还没解决的错误
查看>>
JScript中的prototype(原型)属性研究(1)
查看>>
Winform开发框架之插件化应用框架实现
查看>>
Nodejs·理解Buffer
查看>>
C#实现一颗树!
查看>>
I.MX6 bq27441 driver porting
查看>>
3.3. atop - AT Computing's System & Process Monitor
查看>>
【设计模式】—— 单例模式Singleton
查看>>