Const метод доступа к статическим переменным - PullRequest
5 голосов
/ 15 ноября 2010

Прошу прощения, если об этом уже спрашивали. В моих результатах поиска не появилось похожего вопроса.

Это концептуальный вопрос. Согласно MSDN и другим, а также:

Постоянная функция-член не может изменять какие-либо элементы данных или вызывать любые функции-члены, которые не являются постоянными

Почему тогда мы можем получить доступ к статическим переменным-членам из метода const?

Ответы [ 2 ]

13 голосов
/ 15 ноября 2010

Потому что они не являются частью объекта.

9 голосов
/ 23 ноября 2010

Стандарт C ++ говорит это о const функциях-членах:

Если функция-член объявлена ​​const, типом этого является const X*, [...]

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

Таким образом, вы видите, что только нестатические члены-данные являются частью «константности» членаfunction.

Однако, я думаю, что более важно, это указывает на то, что хороший способ понять, что происходит с const функциями-членами, - это сделать неявный указатель this указателем на const.

Поскольку к статическим элементам нет необходимости обращаться через указатель this (неявно или явно), доступ к ним не квалифицирован const.

...