Скрывает ли переопределение неконстантного виртуального метода перегрузку константы?

Подумайте:

#include <iostream>

using namespace std;

struct A {
  virtual void f() { cout << "A::f" << endl; }
  virtual void f() const { cout << "A::f const" << endl; }
};

struct B : public A {};

struct C : public A {
   virtual void f() { cout << "C::f" << endl; }
};


int main()
{
   const B b;
   b.f();   // prints "A::f const"

   const C c;
   c.f();
   // Compile-time error: passing ‘const C’ as ‘this’ argument of
   //   ‘virtual void C::f()’ discards qualifiers
}

(Я использую GCC.)

Кажется, что константная версия f () скрывается в C. Это имеет для меня большой смысл, но так ли это? требуется стандартом?

7
задан Ari 11 November 2010 в 09:51
поделиться