今天在看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’

 

 

 

 

posted on 2012-12-06 21:38  蜗niu漫步  阅读(198)  评论(0)    收藏  举报