2010-11-15 2 views
5

Прошу прощения, если это было задано ранее. У моих результатов поиска не возникало похожего вопроса.Метод Const, обращающийся к статическим переменным

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

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

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

+0

Если вы только читаете переменные-члены, вы не меняете их и не нарушаете требование const? – Jay

+0

@Jay Я могу изменить его, а не просто читать – Samaursa

ответ

9

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

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

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

Итак, вы видите, что только члены нестатического элемента являются частью «константы» функции-члена.

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

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

+1

Благодарим вас за ответ. После некоторого раздумья я решил проверить ваш, как правильный ответ, как он объясняет более подробно, не оставляя никаких сомнений, особенно часть: «... хороший способ понять, что происходит ...» _ – Samaursa

13

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

+1

простой, но тоже точка! – thecoshman

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