struct A
{
// error C2216: 'explicit' cannot be used with 'virtual'
virtual explicit operator bool() const
{
return true;
}
};
struct B : A
{
// error C2216: 'explicit' cannot be used with 'override'
explicit operator bool() const override
{
return false;
}
};
int main()
{
if (A())
{}
if (B())
{}
}
我的编译器是VC ++ 2013 RC。
为什么explicit
与virtual
不兼容?
理由是什么?
答案 0 :(得分:18)
看起来像一个错误,因为以下引用证明它们确实兼容,我找不到任何禁止它。
2)转换功能可以是
explicit
[...]
[...]
5)转换函数可以是virtual
。
和
5)
virtual
说明符只能用于非静态类成员函数的初始声明; 见10.3。
6)explicit
说明符只能用于声明构造函数或转换函数 它的类定义;见12.3.1和12.3.2。