c++新标准的一个问题

显示转换运算符存在多个兼容版本的时候,explicit 关键字无效,编译器默认会选择那个兼容版本进行转换,而不是报错。

测试环境:gcc4.8.1

示例代码:

 1 class plebe
 2 {
 3 private:
 4     char i=30;
 5 public:
 6     plebe(int i):i(i){}
 7     operator int()const
 8     {
 9         return (int)i;
10     }
11     explicit operator double()const
12     {
13         return (double)i;
14     }
15 };
16 
17 int main()
18 {
19   plebe one('a'),two('b');
20     int n=one;
21     double m=two;
22     cout<<"n:"<<n<<endl;
23     cout<<"m:"<<m<<endl;
24   return 0;
25 }
explicit operator double()const 这行有个explicit
所以double m=two;这句应该编译不过才对
实际上编译过了 
但是把int转换相关代码去掉编译器就会报错。
这是否是个bug?
原文地址:https://www.cnblogs.com/argb/p/3308878.html