Каждый раз, когда я пишу тривиальные геттеры (функции get, которые просто возвращают значение члена), я удивляюсь, почему у oop-языков просто нет модификатора доступа «только для чтения», который позволял бы читать значение членов объекта но не позволяет вам устанавливать их так же, как const вещи в C ++.
Частные, защищенные, общедоступные модификаторы предоставляют вам полный доступ (чтение / запись) или отсутствие доступа.
Запись геттера и его вызов каждый раз медленна, потому что вызов функции медленнее, чем просто доступ к члену. Хороший оптимизатор может оптимизировать эти вызовы геттера, но это «волшебство». И я не думаю, что будет хорошей идеей узнать, как работает оптимизатор определенного компилятора, и написать код для его использования.
Так зачем нам на практике писать аксессоры, интерфейсы только для чтения, когда только новый модификатор доступа может сработать?
ps1: пожалуйста, не говорите такие вещи, как «Это нарушит инкапсуляцию». Публичный foo.getX()
и публичный, но только для чтения foo.x
будут делать то же самое.
РЕДАКТИРОВАТЬ: Я не написал свой пост ясно. Сожалею. Я имею в виду, что вы можете прочитать значение члена за пределами, но вы не можете установить его. Вы можете установить его значение только в области видимости класса.