2013-02-12 3 views
1

Мы получили семантически и синтаксически правильный метод, который выглядит следующим образом:Понимание Const в C++

const Foo & bar(const Bim & bam) const; 

Мы должны объяснить, что подразумевается под каждым из трех Const вызовов. Я новичок в C++ и не знаю, что они означают. Я понимаю (примерно), что константа в конце означает, что метод может быть вызван только для константных переменных и обещает не распространять изменения. Однако я не понимаю двух других. Пожалуйста, поправьте меня, если я ошибаюсь в последнем.

+0

Я считаю, что bam является постоянным вызовом по ссылке типа Bim. – Busch

+0

Стоит прочитать: http://www.parashift.com/c++-faq/const-correctness.html –

+2

Указывая, что ваша проблема решена, нажмите на галочку рядом с лучшим ответом, а не изменив заголовок сообщения , –

ответ

0

Я понимаю (примерно), что Const в конце означает, что метод можно назвать только при константных переменных и обещает не распространения изменений.

Половина права. Функция может вызываться для объектов const или non-const и обещает не изменять состояние (не изменяемые элементы) объекта или вызывать любые неконстантные функции-члены. Это нормально, если вы вызываете неконстантные объекты, но обратное неверно. То есть, если конечный const не был там, тогда можно было бы вызвать на const объекты не.

4

Смотрите ниже для объяснения

(1)const Foo & bar((2)const Bim & bam) (3)const; 
  1. Метод возвращает ссылку типа Foo, который неизменен.
  2. Параметр методов типа Bim не будет модифицирован методом. Это означает, что вы можете передать в этот метод объекты, которые являются константами и не константами. В любом случае метод не будет изменять объект или может только вызвать методы для этого объекта, которые являются константами.
  3. Это означает, что этот метод никоим образом не изменяет объект.

PS: Для 3 есть способы обойти это, если вы непослушный мальчик

+0

Ах! Потрясающие. Благодаря тонну. Это имеет смысл в сочетании с ответом Дэвида Саксона. Большая помощь! – Busch

0

-> Для инт func1() сопзЬ; Когда вы указываете константу в конце функции, это означает, что эта функция доступна только для чтения, вы не можете изменять объект, для которого вызывается эта функция. -> Для func (const bim); константа в аргументе функции, как вы поняли, не позволит изменить этот конкретный объект. -> И для const func2(); означает, что тип возвращаемой функции является постоянным.

Смежные вопросы