C++构造函数 explicit关键字不起作用的一次小坑记录
2017-12-08 22:22
393 查看
欢迎访问我的个人博客:原文链接
C++中的explicit关键字只能用于修饰只有一个参数的类构造函数,它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的, 类构造函数默认情况下即声明为implicit(隐式)。
如果之前的构造函数是CGay(const string strName = “”),并且已经有几个地方被使用过了。
调用是这样:
然后又增加了一个新的默认参数改成
之前写的Gay1、Gay2都不会有任何报错提示。合法的。这样就很坑了。
增加一个参数的时候,从后面增加;
不要在构造函数里写这种幺蛾子,增加一个void SetShow(bool bShow)的接口;
C++中的explicit关键字只能用于修饰只有一个参数的类构造函数,它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的, 类构造函数默认情况下即声明为implicit(隐式)。
class CGay { public: explicit CGay(bool bShow = false, const string strName = ""); ~CGay(); private: bool m_bShow; string m_strName; }; CGay::CGay(bool bShow, const string strName) { m_bShow = bShow; m_strName = strName; } CGay::~CGay() { } const string GAY = "GAY"; CGay aGay(GAY); //调用失败 CGay aGay("Gay1"); //调用成功被隐式转换为了CGay(true,""); CGay aGay(1); //调用成功被隐式转换为了CGay(true,"");
如果之前的构造函数是CGay(const string strName = “”),并且已经有几个地方被使用过了。
调用是这样:
CGay aGay("Gay1"); CGay aGay("Gay2");
然后又增加了一个新的默认参数改成
CGay(bool bShow = false, const string strName = "");
之前写的Gay1、Gay2都不会有任何报错提示。合法的。这样就很坑了。
增加一个参数的时候,从后面增加;
不要在构造函数里写这种幺蛾子,增加一个void SetShow(bool bShow)的接口;
相关文章推荐
- 从零开始学C++之构造函数与析构函数(一):构造函数、析构函数、赋值与初始化、explicit关键字
- C++修饰构造函数的explicit关键字
- C++当中构造函数前面添加explicit关键字的作用
- 从零开始学C++之构造函数与析构函数(一):构造函数、析构函数、赋值与初始化、explicit关键字
- C++中的转换函数、explicit关键字与non-explicit-one-argument构造函数
- C++ explicit关键字应用于构造函数
- C++修饰构造函数的explicit关键字
- 从Qt谈到C++(一):关键字explicit与构造函数
- C++中什么情况下要用explicit关键字修饰构造函数?
- C++ explicit关键字应用于构造函数
- c++中关键字explicit用于类的构造函数
- c++ 构造函数中explicit关键字的作用
- C++ 构造函数放置默认转换explicit关键字(2)
- C++三种构造函数以及explicit和friend关键字
- C++中构造函数前面的explicit关键字
- C++ 中的关键字-------explicit 修饰构造函数
- C++ explicit关键字应用于构造函数
- C++基础---构造函数与关键字explicit
- 关于QT/C++中explicit关键字和构造函数的*parent参数的简单说明
- 从零开始学C++之构造函数与析构函数(一):构造函数、析构函数、赋值与初始化、explicit关键字