En utilisant la version gcc 4.8.2:qualificatif const disparaît de la fonction virtuelle pure
Je suis en cours d'exécution dans un problème où le qualificatif const sur mes paramètres est en train de disparaître quand je compile mon code. Voici un exemple:
main.cc:
#include <iostream>
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 << b->getSum(3) << "\n";
}
compilée par:
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 lors de la compilation?
@ πάνταῥεῖ Plus précisément, il * a * une signification (à l'intérieur de la fonction) mais il ne fait pas partie de la signature. –
@Konrad Rudolph Ecrivez cela comme une réponse. –
Il s'agit d'une règle de langage, les qualificatifs cv sur les arguments de fonction sont ignorés pour la résolution de surcharge. Section 13.1 de la spécification de langage C++. –