Что означает этот const перед именем метода?

В одном из наших учебников предлагается использовать интерфейсы в C ++ в качестве хорошей практики проектирования. Они приводят ниже пример;

<code>class IAnimation
{
  public:
      virtual void VAdvance(const int deltaMilisec) = 0;
      virtual bool const VAtEnd() const = 0;
      virtual int const VGetPostition() const = 0;
};
</code>

Я не понял значение:

<code>virtual bool const VAtEnd() const = 0;
virtual int const VGetPostition() const = 0;
</code>

Я знаю, что const используется после (), чтобы сделать их доступными из экземпляров const. Но что означают const перед VAtEnd и VGetPosition (имена методов)?

Спасибо.

 Martin York16 апр. 2012 г., 18:35
const связывается слева (если он не слева, то справа).
 David Heffernan16 апр. 2012 г., 18:26
Похоже, что автор кода пытается усложнить понимание кода!

Ответы на вопрос(1)

Решение Вопроса

Это означает, что возвращаемый тип является константным, он такой же, как:

virtual const bool VAtEnd() const = 0;
virtual const int VGetPostition() const = 0;

Это не имеет практического значения, поскольку возвращаемое значение все равно копируется.

Если вы возвращаете объект, хотя:

struct A
{
    void goo() {}
};

const A foo() {return A();}



int main()
{
    A x = foo();
    x.goo();      //ok
    foo().goo();  //error
}
 16 апр. 2012 г., 18:37
Это предотвращает такие странности, как:VGetPostition() = 4 или любое присвоение функции на самом деле. Не знаю, почему вы хотели бы сделать это, хотя.
 16 апр. 2012 г., 19:03
Следует отметить, что возврат объектов по значению const не является хорошей практикой, поскольку он запрещает семантику перемещения C ++ 11.
 16 апр. 2012 г., 18:54
@ Mahesha999:const bool более интуитивно понятен, если вы говорите на таком языке, как английский, который обычно ставит прилагательные перед существительными.bool const более согласуется с другими видами использованияconst (например.char const * const f() const), где каждыйconst квалифицирует идентификатор непосредственно перед ним.
 Mahesha99916 апр. 2012 г., 18:30
Спасибо @Luchian Григоре. Я должен пересмотреть свои знания C ++. Кстати, const bool более интуитивно понятен. И да, так как я здесь новичок, SOF просит меня подождать 9 минут, прежде чем я смогу пометить ваш пост как ответ :(.
 16 апр. 2012 г., 18:49
@ Mahesha999: Какой из них более читабелен, зависит от обсуждения, я предпочитаюconst на правой стороне, потому что он более последовательный и, следовательно, требует меньше мыслительных усилий. Рассматриватьtypedef int* intp;, сейчасconst int* а такжеconst intp разные типы, ноint* const такой же какintp const (то есть вы можете мысленно заменить тип на место typedef, если напишитеconst на правой стороне, но вы не можете сделать это, еслиconst находится слева

Ваш ответ на вопрос