以下标准是否符合要求?你能举这个部分吗?
struct A
{
virtual void func() = 0;
};
struct B
{
void func(){}
};
struct C : public A, public B
{
virtual void func(){ B::func(); }
};
Run Code Online (Sandbox Code Playgroud)
我在VS2010中得到了一个奇怪的编译器警告,它在同等但更复杂的代码中指向func派生最多类中的声明:warning C4505: unreferenced local function has been removed.我不知道为什么编译器认为在类中声明的虚函数是本地的; 但是我不能在一个更简单的例子中重复这个警告.
我想出了一个小警告的重复案例.假设它与函数隐藏有关,我认为我走错了路.这是repro案例:
template<typename T>
struct C
{
int GetType() const;
virtual int func() const; // {return 4;} // Doing this inline removes the warning <--------------
};
template<typename T>
int C<T>::GetType() const
{
return 0;
}
template<>
int C<int>::GetType() const
{
return 12;
}
template<typename T>
int C<T>::func() const
{
return 3;
}
// Adding the following removes the warning <--------------------
// template<>
// int C<int>::func() const
// {
// return 4;
// }
Run Code Online (Sandbox Code Playgroud)
我很确定这只是一个VS2010错误.
代码格式良好。 C::func覆盖A::func. B::func是一个不相关的函数。规范如下(10.3/2):
如果在类和直接或间接派生自 的类中
vf声明虚拟成员函数,则具有与被声明,那么也是 virtual (无论是否如此声明)并且它覆盖 111 。BaseDerivedBasevfBase::vfDerived::vfBase::vf
C::func与 具有相同的名称并且A::func是A::func虚拟的,因此C::func覆盖A::func. B::func与 没有关系A::func;我不知道规范中是否有任何语言明确解决了这种情况。
Visual C++ 11 Beta 编译器不会对此代码发出任何警告或错误。