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 ...
随机推荐
- 【js基础】js排序方法——快排+堆排+插排+选择排
快排 Array.prototype.fastSort = function(){ var arr = this; function sort(left, right, arr){ if( left ...
- Java——语句
空语句: ; 符合语句:{} if语句:if () {} else {} break 语句:跳出单层循环 循环语句:for(;;){} do{}while()
- 洗礼灵魂,修炼python(26)--编程核心之“递归”
递归 1.什么是递归: 其实前面都提过,但没有详细讲.多次调用自身就叫递归 看图,这种就叫递归 看过盗梦空间没?其实也是递归 2.递归需要满足条件: 有调用函数自身 有一个正确的返回条件来结束 在使用 ...
- C#语言————第四章 深入C#的String类
*********类型转换**************** Convert与Parse的区别: Convert可以将任何内置类型转换为其他任何内置类型 XX.Parse:只能将字符串转换为XX类型例如 ...
- Dos命令讲解
目录 一.什么是DOS 二.启动DOS的多种方法 三.DOS的内部命令与外部命令 四.系统环境变量讲解 增加Path环境变量路径 常见的系统环境变量 五.常用的运行命令 六.DOS使用技巧 设置CMD ...
- Selenium 、WebDriver :Capability
Selenium | WebDriver Capability 内容摘要: 1.WebDriver 通用配置 2.RemoteWebDriver特有配置 3.Grid特有配置 4.在使用特定浏览器时的 ...
- 布局:高度已知,布局一个三栏布局,左栏和右栏宽度为200px,中间自适应
需求:高度已知为200px,写出三栏布局,左栏和右栏各位200px,中间自适应,如下图所示: 方法一:float浮动布局 原理是:定义三个区块,需要注意的是中间的区块放在右边区块的下面,统一设置高度为 ...
- trace文件解读
*********************************************************************示例:全表扫描的10046文件解读************** ...
- 安装LIBXML2
具体安装步骤: 1.解压:$tar zxvf libxml2-2.6.20.tar.gz 2.进入解压后的安装目录:$cd libxml2-2.6.20 3.安装三部曲:1)$./configure ...
- 离线安装Cloudera Manager 5和CDH5(最新版5.9.3) 完全教程(五)数据库安装(双节点)
一.方案选择 通过Lvs+keepalived+mysql(主主同步)实现数据库层面的高可用方案,需要两台服务器作为数据库提供业务数据的存储,应用服务器通过vip访问数据库,允许同一时间内一台数据库服 ...