C++中explicit关键字用法
来源:互联网 发布:linux gem 编辑:程序博客网 时间:2024/05/22 16:41
在C++类的实例化过程中,存在一种隐式转换,即可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换。
一个简单的例子:
#include <iostream>#include <string>using namespace std;class Book{public:Book(){}Book(const string name, const int price = 100) : _name(name), _price(price){cout << "构造函数调用!" << endl;;};void IsSameBook(const Book & book){if (_name == book._name)cout << "两本书重名!" << endl;elsecout << "两本书不重名!" << endl;}private:string _name;int _price;};void main(){Book A("AA");A.IsSameBook(string("AA"));system("Pause");}
构造函数调用!构造函数调用!两本书重名!
为了防止这种意料之外的隐式转换,在类的构造函数前加上explicit关键字,可以防止形参隐式转换为该类类型的转换:
#include <iostream>#include <string>using namespace std;class Book{public:Book(){}explicit Book(const string name, const int price = 100) : _name(name), _price(price){cout << "构造函数调用!" << endl;;};void IsSameBook(const Book & book){if (_name == book._name)cout << "两本书重名!" << endl;elsecout << "两本书不重名!" << endl;}private:string _name;int _price;};void main(){Book A("AA");Book B = Book("AA");A.IsSameBook(B);system("Pause");}
构造函数加上explicit关键字之后,使用A.IsSameBook(string("AA"))的写法,编译器会报错。explicit的作用就是防止其他类型对该类类型的隐式转换,但仍可以以显示转换的方式调用, 如 Book B=Book("AA")的写法。
阅读全文
0 0
- C++中explicit关键字用法
- C++中explicit关键字用法
- c++中explicit关键字用法
- C+中explicit的用法
- explicit 关键字的用法
- C++ explicit 关键字用法
- explicit关键字的用法
- C++:explicit 关键字
- C++explicit关键字
- 【C++】explicit关键字
- C++explicit关键字
- 【C++】explicit关键字
- 【C++】explicit关键字
- 【C++】explicit关键字
- C++中关键字explicit
- C++中 explicit关键字
- C++中explicit关键字
- c++中explicit关键字
- 23. 散列表
- @property
- 【OpenStack源码分析之五】Nova API 的插件管理
- eNB log
- CodeForces
- C++中explicit关键字用法
- 语句(Statement)---练习
- JavaScript操作DOM的那些坑
- Java生成和操作Excel文件
- Unix环境编程之 进程环境
- Luogu P1141 01迷宫
- spgw log
- if语句和switch语句
- Spring Cloud (一)相关知识概要