C++ explicit
来源:互联网 发布:vb用什么软件编写 编辑:程序博客网 时间:2024/06/06 13:10
说明
- 写类的构造函数时,如果不加
explicit
进行修饰时,可能会发生一些隐式转换 - 对于一个类,如果没有找到需要进行隐式转换的理由,则建议加上explicit进行修饰,避免不可预料的转换问题
代码
#include<iostream>#include<exception>#include<fstream>#include<sstream>#include<string>#include<vector>#include<iterator>#include<list>#include<deque>#include<stack>#include<queue>#include<concurrent_priority_queue.h>#include<algorithm>#include<numeric>#include<functional> //bind#include<map>#include<set>#include<unordered_map>#include<memory>#include<assert.h>#include<tuple>#include<regex>using namespace std;class ExplicitClass{public: ExplicitClass(string s) : height(0), width(0) { name = s; cout << name << " has been initalized!" << endl; } int compare(const ExplicitClass &ec) { return strcmp(name.c_str(), ec.name.c_str()); }private: double height; double width; string name;};int main(){ cout << "start!" << endl; ExplicitClass c1("aa"); string n("bb"); cout << c1.compare(n) << endl; cout << "end!" << endl; system("pause"); return EXIT_SUCCESS;}
* 说明:上面的代码中,没有加上explicit
,则在传入字符串进行compare
时,发现也构造一个ExplicitClass
的临时对象(运行时可以发现有两次构造输出)
* 如果将构造函数改为
explicit ExplicitClass(string s) : height(0), width(0) { name = s; cout << name << " has been initalized!" << endl; }
则会发生编译错误,因为不允许隐式转换
参考链接
- http://www.cnblogs.com/winnersun/archive/2011/07/16/2108440.html
0 0
- C++, explicit
- c++-explicit
- [C++]explicit解释
- [C++]explicit解释
- [C++]explicit解释
- C++:explicit 关键字
- C++explicit关键字
- 【C++】explicit关键字
- explicit构造函数(C++)
- C++explicit关键字
- 【C++】explicit构造函数
- 【C++】explicit关键字
- C++explicit的用法
- 【C++】explicit关键字
- [C++]explicit构造函数
- C++explicit的使用
- c/c++ explicit
- 【C++】explicit关键字
- C#实现MD5加密
- MySQL中的ROWNUM的实现
- 开发规范:Javascript开发规范
- <转> hadoop学习之hadoop完全分布式集群安装
- UICollectionView基础
- C++ explicit
- html<font>标签的color属性以及<h1> 到 <h6> 标签
- 浅谈一点对VR游戏的看法。
- 使用Linux自带的i2c-dev操作EEPROM
- Oracle使用——PLSQL的中文乱码显示全是问号
- Android OTA升级原理和流程分析(四)---Android系统Recovery模式的工作原理
- structs利用 FileUtils 类文件上传示例
- JQuery 加载并解析 XML实现省市联动
- linux下创建软连接和硬链接