显示转换运算符存在多个兼容版本的时候,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;这句应该编译不过才对
实际上编译过了
所以double m=two;这句应该编译不过才对
实际上编译过了
但是把int转换相关代码去掉编译器就会报错。
这是否是个bug?