Я прочитал "Эффективное С++ 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
Есть ли причины для этого?