Я прочитал "Эффективное С++ 3rd Edition", написанное Скоттом Мейерсом.
Пункт 3 книги "Использовать const, когда это возможно", говорит, что если мы хотим предотвратить случайное присвоение значения rval для возвращаемого значения функции, тип возврата должен быть const.
Например, функция приращения для iterator:
const iterator iterator::operator++(int) {
...
}
Затем предотвращаются некоторые несчастные случаи.
iterator it;
// error in the following, same as primitive pointer
// I wanted to compare iterators
if (it++ = iterator()) {
...
}
Однако итераторы, такие как std::vector::iterator в GCC, не возвращают значения const.
vector<int> v;
v.begin()++ = v.begin(); // pass compiler check
Есть ли причины для этого?