Le qualificatif disparaît de la fonction virtuelle pure

Utilisation de la version 4.8.2 de gcc:

Je rencontre un problème où le qualificatif const de mes parameters disparaît lorsque je comstack mon code. Voici un exemple:

main.cc:

#include  class Base { public: virtual int getSum( const int number ) = 0; }; class Derived : public Base { public: Derived( const int& num ) : _myNumber( num ) {} virtual int getSum( const int number ) { return _myNumber + number; } private: int _myNumber; }; int main( int argc, const char* argv[] ) { Base *b = new Derived( 2 ); std::cout <getSum( 3 ) << "\n"; } 

Compilé comme suit:

 g++ main.cc -o const_test 

Quand je lance nm:

 nm const_test | c++filt | grep getSum 

Je reçois la sortie suivante:

 0000000000400b60 W Derived::getSum(int) 

Pourquoi le const disparaît-il de ma fonction quand il comstack?

Votre signature de fonction

 virtual int getSum(const int number) = 0; 

est en fait exactement équivalent à

 virtual int getSum(int number) = 0; 

const n’a aucun effet sur la déclaration de signature de fonction pour les parameters passés par valeur.

Le seul effet est que vous ne pouvez pas modifier l’instance de paramètre sur la stack à l’intérieur d’une définition potentielle de cette méthode. En fait, il suffit de le mettre uniquement ici, pour éviter de changer l’instance du paramètre dans le corps de la fonction.