C++ explicit关键字
2015-08-09 11:10
246 查看
雨后的清晨感觉特别干净,草上带着的露水特别美,再加上冷冷的空气,吸上一口,真的如新生了一般。神清气爽的日子,能够写出更加纯粹的代码。
今天进入面向对象思想的deep研究阶段。
C++explicit关键字用来修饰类的构造函数,声明该构造函数是显式的,它出现的原因是为了避免某些情况下的不正常的隐式转换。如果一个构造函数带有一个参数,那么在编译的时候就会默认有一个缺省的转换:将与该构造函数对应的数据类型的数据转换为该类对象。代码如下所示:
如上代码编译器会自动将整型类型转换为myclass对象,等同于以下操作:
这就是C++的默认隐式转换。
为了防止自动转换,应此引入了explicit关键字。修改后代码如下:
今天进入面向对象思想的deep研究阶段。
C++explicit关键字用来修饰类的构造函数,声明该构造函数是显式的,它出现的原因是为了避免某些情况下的不正常的隐式转换。如果一个构造函数带有一个参数,那么在编译的时候就会默认有一个缺省的转换:将与该构造函数对应的数据类型的数据转换为该类对象。代码如下所示:
class classobj { public: int num; public: classobj(int data) :num(data) { cout << "构造函数被调用" << endl; } }; classobj num = 5; //不会报错,编译器默认隐式转换
如上代码编译器会自动将整型类型转换为myclass对象,等同于以下操作:
classobj object=5; classobj num = object;
这就是C++的默认隐式转换。
为了防止自动转换,应此引入了explicit关键字。修改后代码如下:
class classobj { public: int num; public: explicit classobj(int data) :num(data) { cout << "构造函数被调用" << endl; } }; classobj num = 5; //会报错,无法从int转换到classobj
相关文章推荐
- Lua编程示例(二):面向对象、metatable对表进行扩展
- C#中面向对象编程机制之多态学习笔记
- 浅谈Lua的面向对象特性
- Lua面向对象之类和继承浅析
- JavaScript面向对象的两种书写方法以及差别
- 浅谈c# 面向对象之类与对象
- C#面向对象特征的具体实现及作用详解
- C# 面向对象的基本原则
- 浅谈对c# 面向对象的理解
- Ruby面向对象编程详解
- php学习 面向对象 课件第1/2页
- PHP程序61条面向对象分析设计的经验小结
- 收集学习asp.net比较完整的面向对象开发流程
- javascript 面向对象编程 万物皆对象
- 不错的JavaScript面向对象的简单入门介绍第1/2页
- [推荐]javascript 面向对象技术基础教程
- javascript 面向对象的JavaScript类
- JavaScript中的面向对象介绍
- javascript实现面向对象类的功能书写技巧
- Javascript 面向对象 继承