Почему оператор ++ возвращает неконстантное значение?

Я прочитал «Эффективное 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

Есть ли для этого какие-то причины?

23
задан iammilind 8 November 2011 в 05:12
поделиться