Ho letto l'efficace terza edizione C++ scritta da Scott Meyers.Perché operator ++ restituisce un valore non const?
L'elemento 3 del libro, "Utilizzare const
quando possibile", dice se vogliamo evitare che i rvalues vengano assegnati al valore di ritorno della funzione accidentalmente, il tipo restituito deve essere const
.
Ad esempio, la funzione di incremento per iterator
:
const iterator iterator::operator++(int) {
...
}
Poi, alcuni incidenti è impedito.
iterator it;
// error in the following, same as primitive pointer
// I wanted to compare iterators
if (it++ = iterator()) {
...
}
Tuttavia, iteratori, come std::vector::iterator
nel GCC non restituiscono const
valori.
vector<int> v;
v.begin()++ = v.begin(); // pass compiler check
Ci sono dei motivi?
Non si dovrebbe usare comunque ++ su qualsiasi lato di un'espressione di confronto. –
Incredibile quante risposte sbagliate ha avuto. –
Ora è un trucco obsoleto, perché impedisce la costruzione del movimento. Il modo moderno per farlo è definire 'operator =' come predefinito usando un 'e' qualificatore di ref. –