В чем разница между const virtual и virtual const?

Я видел, что некоторая функция в C++ была объявлена как

virtual const int getNumber();

но в чем разница, если функция объявлена как следующая?

const virtual int getNumber();

в чем разница между этими двумя?

4 ответов


как уже было сказано, разницы нет. Однако, обратите внимание, что эти два do differ:

virtual const int getNumber();
virtual       int getNumber() const;

в первом способе, const относится к возвращаемому значению типа int.

во втором способе, const относится к объекту, на который вызывается метод; то есть this будет иметь тип T const * внутри этого метода, - вы сможете назвать только const методы, изменить только mutable поля и так далее.


нет никакой разницы. Спецификаторы декларации обычно могут быть написаны в любом порядке.


нет никакой разницы. Если мы посмотрим на резюме грамматики для decl-спецификатор-seq мы видим, что он определен рекурсивным образом:

decl-specifier:
     type-specifier

decl-specifier-seq:
     decl-specifier decl-specifier-seq

единственное ограничение это const и volatile можно комбинировать с любым спецификатором типа, кроме самих себя (нет const const, volatile volatile и т. д.), Нет правила о порядке, в котором вы их используете.


никакой разницы. Вы можете применить модификаторы в вашем любимом порядке.