В чем разница между константным виртуальным и виртуальным 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, мы увидим, что он определен рекурсивным образом:
Единственное ограничение состоит в том, что const и volatile можно комбинировать с любым спецификатором типа, кроме самих себя (нет const const, volatile volatile и т.д.), нет правила того порядка, в котором вы их используете.
Ответ 4
Никакой разницы. Вы можете применять модификаторы в своем любимом порядке.