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 ... 
随机推荐
- entity framework异常   The specified cast from a materialized 'System.Int32' type to the 'System.String' type is not valid
			ROW_NUMBER() OVER (ORDER BY (select Null)) AS Id entity framework 查询中有这句会有异常 
- windows 自动贴边
			设置windows 自动贴边(窗口拖到显示器边框就自动适应屏幕): https://jingyan.baidu.com/article/d2b1d1029d17b95c7e37d4f0.html 资源 ... 
- eclipse中SVN报错解决
			在Eclipse市场上安装完SVN插件后连接SVN时出现以下错误: SVN: '0x00400006: Validate Repository Location' operation finished ... 
- 【PAT】B1056 组合数的和(15 分)
			就看着代码量一直到没什么好说的了 #include<stdio.h> int main(){ int N,K;scanf("%d",&N); int sum=0 ... 
- Jenkins 自动发布 Spring Boot 项目(Gitee)
			1.下载 wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war,并部署到tomcat下 2.机器安装好 java ,maven ,g ... 
- linux系统日志自动切割工具----logrotate
			参考资料 :https://www.cnblogs.com/kevingrace/p/6307298.html 对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务 ... 
- January 10th, 2018 Week 02nd Wednesday
			No need to have a reason to love you. Anything can be a reason not to love you. 喜欢你,不需要什么理由:不喜欢你,什么都 ... 
- Python3编写网络爬虫05-基本解析库XPath的使用
			一.XPath 全称 XML Path Language 是一门在XML文档中 查找信息的语言 最初是用来搜寻XML文档的 但是它同样适用于HTML文档的搜索 XPath 的选择功能十分强大,它提供了 ... 
- 前端性能优化成神之路—资源合并与压缩减少HTTP请求
			资源合并与压缩减少HTTP请求的概要 资源合并与压缩减少HTTP请求主要的两个优化点是减少HTTP请求的数量和减少请求资源的大小 http协议是无状态的应用层协议,意味着每次http请求都需要建立通信 ... 
- Git解决冲突(本地共享仓库简单实践)
			1:可以使用git init --bare初始化一个本地共享仓库. 2:假设有A,B两个人进行合作开发,此时A,B可以使用git clone 共享仓库路径进行克隆.此时A,B的室友仓库代码是一致的. ... 
