c++ explicit 修饰构造函数
class String { String ( const char* p ); // 用C风格的字符串p作为初始化值 //… } String s1 = “hello”; //OK 隐式转换,等价于String s1 = String(“hello”);
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 s5 = ‘a’; //编译通过,分配int(‘a’)个字节的空字符串
s4 和s5 分别把一个int型和char型,隐式转换成了分配若干字节的空字符串,容易令人误解。
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 可以有效得防止构造函数的隐式转换带来的错误或者误解
----------------------------------------------------------
explicit 只对构造函数起作用,用来抑制隐式转换。如:
class A { A(int a); }; int Function(A a);
当调用 Function(2) 的时候,2 会隐式转换为 A 类型。这种情况常常不是程序员想要的结果,所以,要避免之,就可以这样写:
class A { explicit A(int a); }; int Function(A a);
这样,当调用 Function(2) 的时候,编译器会给出错误信息(除非 Function 有个以 int 为参数的重载形式),这就避免了在程序员毫不知情的情况下出现错误。
总结:explicit 只对构造函数起作用,用来抑制隐式转换。
转载:http://www.cnblogs.com/cutepig/archive/2009/01/14/1375917.html
c++ explicit 修饰构造函数相关推荐
- 关键字explicit与构造函数
从Qt谈到C++(一):关键字explicit与构造函数 时间 2014-04-26 22:55:44 CSDN博客 原文 http://blog.csdn.net/guodongxiaren/art ...
- 38.C++修饰构造函数的explicit关键字
C++ explicit关键字的作用主要是用来修饰类的构造函数,表明该构造函数是显式的,禁止单参数构造函数的隐式转换. 如果C++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该 ...
- 侯捷C++复现 :explicit在构造函数中
首先是个这样的小数的例子,没加explicit看看是什么情况: 类: // // Created by 浅笑 on 2022/11/28. // #ifndef CLION_PJ_FRACTION_H ...
- C++知识点12——构造函数初步
构造函数就是定义了类的对象的初始化方式的函数,在初始化类的对象时,会被自动调用 构造函数无返回值,可以被重载(有多个构造函数,可以有多种初始化的方式,参考C++知识点4--vector与string简 ...
- c++ explicit(显式)关键字
•explicit 修饰构造函数时,可以防止隐式转换和复制初始化 •explicit 修饰转换函数时,可以防止隐式转换,但 按语境转换 除外 explicit 使用 struct A {A(int) ...
- C++ explicit的使用
看到一篇文章中对explicit关键字的说明简明易懂,特此收藏和学习.https://blog.csdn.net/qq_24127015/article/details/104412800 C++提供 ...
- 构造函数的调用场景--构造函数与拷贝构造函数、移动构造函数之辨
在Scott Meyers的著作<Effective C++>条款5中,明确指出要"了解C++默默编写并调用哪些函数".这里通过一个简短的C++代码,阐述哪些场景调用构 ...
- C++面试知识点总结
一.static关键字的作用 1.修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在 main 函数运行前就分配了空间,如果有初始值就用初始值初始化它,如果没有初始值系统用默认值初始化 ...
- 大厂面试八股文——C++
文章目录 可变参数-printf的实现原理 编译语言和解释语言 C++空指针调用成员函数 std::move 移动语义 std::move的实现 完美转换 malloc函数底层实现 被free回收的内 ...
最新文章
- 汇编: and,or逻辑运算指令
- Web安全之XSS漏洞
- pstack 安装linux_详解命令-pstack
- Nginx下301重定向不带www的域名到带www的域名
- sql LEFT JOIN RIGHT JOIN(左连接)(mysql)
- c语言 结构作用是什么,C语言选择结构知识点
- HTTP消息推送原理
- html中onfocus作用,HTML onfocus用法及代码示例
- 百瓦快充伤电池?1天两充用了574天后 我发现真相
- Python双均线策略回测(2021-10-12)
- CentOS 安装meld
- 使用OpenBTS基站测试物联网模块安全性
- 手持PDA无线打印 扫描一体方案-PDA系统程序
- 微信视频号标题怎么写吸引眼球
- 用Python一键生成属于自己的QQ历史报告,看看你对自己的QQ了解程度有多深?
- css自动换行,css代码
- Unity3D游戏开发最佳实践技巧
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(五) 之 加好友,加群流程,消息管理和即时消息提示的实现...
- 粒子群与蚁群算法的区别
- 王者荣耀自动化获取金币/经验周上限 教程
热门文章
- VTK:Texture之TexturePlane
- VTK:图表之VertexSize
- OpenCV实现幻灯片模糊slides blur的实例(附完整代码)
- const关键字的作用?
- C++归并排序(附完整源码)
- python类_Python中的类
- ie浏览器在线使用_全新的Edge浏览器,快来尝鲜
- 合并k个有序链表 python_[LeetCode] 23. Merge k Sorted Lists 合并k个有序链表
- Java导出数据到Excel
- 史上最简单的SpringCloud教程 | 第四篇:断路器(Hystrix)