Explicit 关键字和各种类型转换(转)
说实话,从来没有感觉到这个关键字有用,直到今天。 explicit的意思是明显的,和它相对应的一个词是implicit意思是隐藏的。 我参考了MSDN和《c++标准程序库》对这个关键字的描述,并参考了网络上对这个关键字的解释。现将它的使用方法和总结记录如下: 首先这个关键字只能用在类构造函数。 它的作用是不能进行隐式转换 。 class gxgExplicit //没有关键字explicit的类 { public: int _size; gxgExplicit (int size ) { _size = size; } }; 下面是调用 gxgExplicit gE1(24); //这样是没有问题的 gxgExplicit gE2 = 1; //这样也是没有问题的 gxgExplicit gE3; //这样是不行的,没有默认构造函数 gE1 = 2; //这样也是没有问题的 gE2 = 3; //这样也是没有问题的 gE2 = gE1; //这样也是没有问题的 但是假如gxgExplicit修改为Stack,我们的_size代表的是堆栈的大小,那么调用的第二句就显得不伦不类,而且容易让人疑惑。这并不是可以让代码阅读者明白和接受的形式,虽然它是合法的(编译器可以通过编译)。这是因为 编译器默认情况下有隐式转换的功能 ,你输入gE2 = 1就编译成同第一句相同的结果。所以