Я прочитал «Эффективное C ++ 3-е издание», написанное Скоттом Мейерсом.
в книге «По возможности используйте const
», говорится, что если мы хотим предотвратить случайное присвоение rvalue возвращаемому значению функции, возвращаемый тип должен быть const
.
Для Например, функция приращения для итератора
:
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, не return const
values.
vector<int> v;
v.begin()++ = v.begin(); // pass compiler check
Есть ли для этого какие-то причины?