今天在看redis的C++API的时候,看到了explicit关键字,后来查了下,才知道这个关键字的含义和用法。一般来说,如果类的构造函数有一个参数,那么编译的时候就会有一个缺省的转换操作,即将该构造函数对应数据类型的数据转换为该对象。但是有时候我们并不需要这种操作,因为可能会引起歧义或可读性变差,我们就要避免这种隐式的转换操作,这时候就要用到explicit关键字。
比如:
1 #include <iostream>
2 using namespace std;
3
4 class A
5 {
6 public:
7 A(int n)
8 {
9 num=n;
10 }
11 private:
12 int num;
13 };
14
15 class B
16 {
17 public:
18 explicit B(int n)
19 {
20 num=n;
21 }
22 private:
23 int num;
24 };
25 int main(int agrc,char* argv[])
26 {
27 A a=10;
28 B b=10;
29 return 0;
30 }
编译的时候就会报错
main.cpp:28: 错误:请求从 ‘int’ 转换到非标量类型 ‘B’