В чем разница между константным виртуальным и виртуальным const?

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

virtual const int getNumber();

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

const virtual int getNumber();

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

Ответ 1

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

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

В первом методе const ссылается на возвращаемое значение типа int.

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

Ответ 2

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

Ответ 3

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

decl-specifier:
     type-specifier

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

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

Ответ 4

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