2014-11-27 3 views
-1

В книге «Программирование Интервью Exposed» Джон Mongan (see page 33), Theres объявление функции для односвязанны элемента списка:Что означает const T & value() const?

const T& value() const {...} 

Я понимаю, что все, прежде чем означает имя метода, а именно, что это ссылку на шаблонный тип данных, который вы не можете изменить, но что означает дополнительная константа после значения()? Постоянная ссылка? Я думал, что ссылки уже постоянные (т. Е. Неизменяемый псевдоним, который является объектом).

+0

Ссылки не всегда постоянны, т. Е. 'Const int &' не совпадает с 'int &'. В первом случае вы можете ссылаться (псевдоним) и 'int', но не можете его изменять, а также может связывать' const int & 'с временным, тогда как в последнем случае вы ссылаетесь (псевдоним) на' int' и можете изменить его. В последнем случае вы НЕ МОЖЕТЕ привязывать временную ссылку на неконстантную ссылку, поскольку стандарт C++ запрещает вам, если вы не используете компилятор Microsoft, который имеет способ обмануть все. – vsoftco

ответ

3
const T& value() const {...} 

Это означает, что функция value() будет возвращать тип const T& и между ними (в функции) не будет видоизменяться класса. Скажем, я пишу:

class Cfoo 
{ 
    void foo() const 
    { 
     //Cfoo will not be modified here 
    } 
} 

Если я прямо процитировать msdn:

Объявление функции члена с константным ключевым словом указывает, что функция является функцией «только для чтения», который не изменяет объект для который он называется. Постоянная функция-член не может изменять какие-либо нестатические члены данных или вызывать любые функции-члены, которые не являются константами.

+0

Так что, по сути, это говорит о том, что и вызывающий, и вызываемый не могут изменять членов класса. – P4L

+0

Вызывающий не может изменять частный член в любом случае, но даже постоянная функция-член не может этого сделать. – deeiip

0

const после имени метода означает, что метод не модифицирует какое-либо поле объекта. Следовательно, он может быть вызван на экземпляр объекта const.

+0

Он также может быть вызван неконстантным экземпляром объекта; это не совсем так. – ildjarn

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