auto и const

Еще неочевидная проблема. Реализована два метода получения объекта по индексу — At. Оба возвращают ссылку. Один константный возвращает константную ссылку, потому, что есть константные методы, из которых нельзя вызывать не константные методы. Второй — для редактирования. Возвращает ссылку которую можно редактировать.

Есть код:

auto object = At(x, y);

object.field = <какое-то значение>;

At, по умолчанию, возвращает константное значение. Присвоение отрабатывает, но изменение не происходит. И ни один компилятор ни на что не ругается.

Почему не предупредить, что объект константный и нельзя менять значение его полей? Почему не выдать ошибку? Исключение? Хоть что-то?!

Да, проблема решается просто:

Object& object = At(x, y);

Но надо же еще найти, что проблема в этом!

Вывод один: auto — Зло. Ну или не зло, но за ним надо смотреть в оба глаза.

Leave a comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *