Effective C++学习笔记之explicit
关键字:
explicit意思为“明确的”和“清楚的”,是C++的关键词,意在阻止隐式类型的转换;
使用原因:
有时候不合法的隐式转换,会让乖巧听话的程序变得不可控。所以适当地使用explicit关键字是有必要的。
如 string str = 'a'; 这样的赋值是不能通过编译,错误原因是 invalid conversion from ‘char’ to ‘const char*,也就是“不能做隐式char->const char转换”。
注意事项:
1、只能用于类内部构造函数的声明前,不能用于类外部构造函数的实现前;
2、只能作用于构造函数的一个参数、或者有默认值的多个参数。
用途举栗:
现有一个testDog的函数,函参是一个Dog类的对象。Dog类只提供了一个设置成员变量age的构造函数。
1、传入name的构造函数,没有使用explicit关键字,直接对testDog传入一个string或者char *,也能得到想要的输出。其中隐式地将 "Huskie" 转换为一个“name = Huskie,age = 0”的Dog类对象。
2、传入age的构造函数,使用了explicit关键字,参数传入int型的2会编译不过,表示“不能做隐式int->Dog转换”。将Dog(2)当做函参传入就会解决此问题。
#include <iostream>
using namespace std; class Dog
{
public:
string name;
int age; explicit Dog(int age_)
{
name = "Huskie";
age = age_;
}
Dog(const char* p)
{
name = p;
age = ;
}
}; void testDog(Dog onedog)
{
cout<<"Dog's name is :"<<onedog.name<<", age :"<<onedog.age<<endl;
} int main()
{
string str = 'a';//invalid conversion from ‘char’ to ‘const char*
//即编译出错,不能做隐式char->const char转换 Dog dog1 = ;//编译出错,不能做隐式int->Dog转换
Dog dog2 = "haha"; cout<<"Test dog:"<<endl;
testDog("Shiba Inu");
testDog();//编译出错,不能做隐式int->Dog转换
testDog(Dog());
return ;
}
Effective C++学习笔记之explicit的更多相关文章
- Effective STL 学习笔记 39 ~ 41
Effective STL 学习笔记 39 ~ 41 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value
Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value */--> div.org-src-container ...
- Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据
Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-fam ...
- Effective STL 学习笔记 32 ~ 33
Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective STL 学习笔记 31:排序算法
Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective STL 学习笔记 Item 30: 保证目标区间足够大
Effective STL 学习笔记 Item 30: 保证目标区间足够大 */--> div.org-src-container { font-size: 85%; font-family: ...
- Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor
Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor */--> div ...
- Effective STL 学习笔记: Item 22 ~ 24
Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monos ...
- Effective STL 学习笔记 Item 21:Comparison Function 相关
Effective STL 学习笔记 Item 21:Comparison Function 相关 */--> div.org-src-container { font-size: 85%; f ...
随机推荐
- Redis系列(二):Redis的数据类型及命令操作
原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...
- Modo教程合集44部
Modo教程合集44部 教程说明:英文视频教程,大部分有工程文件,但不是全部 教程格式:Flv.MP4格式,大部分高清,确保能看清软件上的文字 发货方式:百度网盘下载链接(教程较多,可转存到自己的网盘 ...
- gitlab hooks配置
1.邮件格式过滤 pre-recieive rev_type=commit # Only check the first commit information due to a lot of comm ...
- rsync续传大目录一例
场景 要将大约60T的文件从一台服务器上搬到另外一台上.两边分区还不一样大,一边是一个整的60T大分区,另一边是15T一个的小分区. 解决思路 类比茶壶倒水,一个分区一个分区的填,填满一个再填第二个. ...
- Centos7.5调试/etc/sysctl.conf文件导致宕机
今天安装greenplus数据库,需要调试一个核心文件/etc/sysctl.conf文件,结果导致系统异常宕机,出现的问题就是使用任何命令都不能输出正确的结果,只有这个显示: 不知道是什么原因,ls ...
- Unity RGBA16 + Dither
游戏开发中有些场合,ETC或者说PVRTC压缩质量不满足的情况下,RGBA32(原图)对美术而言肯定可以满足的,但是RGBA32是不管是对内存占用内存太厉害. RGBA16/RGB16会减少内存的占用 ...
- <20180929>任性的甲方
今天参观了朋友在监督的新项目, 这个项目周期大概在6到9个月,预计本年度11月竣工. 总共大楼有五层, 施工面积在一万平米左右. 位于三楼的机房使用的设备有点高大上,发上来鉴赏一下. 双专线, 第二条 ...
- Weblogic读不到Word文件
之前遇到一导出word文件的需求,我的做法是把对应导出内容放到一个word文件中,把其中变化的内容作为变量,然后把该word文件放在WEB-INF目录下用来作为模板.在导出时通过ServletCont ...
- Django之Form进阶
s6day76 内容回顾: Form组件: - 类 继承Form - 字段 字段 - 实例化 - is_valid() - cleaned_data - errors Form 组件: ...
- 崩 oj 1768 最大子矩阵
描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵.比如,如下4 * 4的矩阵0 -2 -7 0 9 2 -6 2 -4 1 - ...