C++中的explicit关键字
2012-06-13 10:15
246 查看
#include <iostream> using namespace std; class Demo { private: int value; public: Demo():value(0){} Demo(int val):value(val){} Demo(const Demo& d):value(d.value){} }; int main() { Demo d = 1; Demo dd = d; return 0; }
Demo d = 1会这样运行:
通过将1传递给单个形参构造函数,用这个构造函数来初始化对象d。
对于下一行代码,通过将d传递给复制构造函数,来初始化dd。
这些隐式调用都是自动完成的。有时候运行的很好,但是也有的时候会造成出乎意外的结果。
能不能防止隐式调用呢?可以的。explicit就是用作这个用途的。当在构造函数和复制构造函数前面都加上explicit时,编译就会出错,下面的写法才是正确的:
#include <iostream> using namespace std; class Demo { private: int value; public: Demo():value(0){} //explicit能防止以赋值语法带有转型操作的初始化 explicit Demo(int val):value(val){} explicit Demo(const Demo& d):value(d.value){} }; int main() { //Demo d = 1; //构造函数加上explicit时错误 Demo d(10); //Demo dd = d; //赋值构造函数加上explicit时错误 Demo dd(d); return 0; }
转自:
http://www.programlife.net/cpp-explicit-keyword.html
相关文章推荐
- C++的类类型隐式转换与explicit关键字
- c++ explicit关键字
- C++ 的explicit 关键字
- C++ explicit关键字详解
- C++中的explicit关键字
- C++中的explicit关键字
- C++ explicit 关键字应用方法 简单明了
- C++中什么情况下要用explicit关键字修饰构造函数?
- C++ explicit关键字应用方法详解
- C++中explicit关键字作用
- C++关键字explicit
- C++中的explicit关键字实例浅析
- C++修饰构造函数的explicit关键字
- C++ explicit关键字详解
- c++ 关键字: explicit
- C++ explicit关键字
- c++ 下的explicit关键字
- C++关键字:mutable、volatile、explicit以及__based mutable关键字
- 在C++中explicit关键字
- C++中explicit关键字的作用