Я немного смущен, почему мне сказали вернуть const foo из двоичного оператора в C++ вместо простого foo.Корректность верности при перегрузке оператора C++ возвращает
Я читал «Мышление на C++» Брюса Эккеля, и в главе о перегрузке оператора он говорит, что «создавая возвращаемое значение [избыточного бинарного оператора] const, вы утверждаете, что только Функция const member может быть вызвана для этого возвращаемого значения. Это const-correct, потому что это мешает вам хранить потенциально ценную информацию в объекте, который, скорее всего, будет потерян ».
Однако, если у меня есть оператор плюс, который возвращает сопзЬ, и оператор инкремента префикс, этот код недействителен:
class Integer{
int i;
public:
Integer(int ii): i(ii){ }
Integer(Integer&);
const Integer operator+();
Integer operator++();
};
int main(){
Integer a(0);
Integer b(1);
Integer c(++(a + b));
}
Чтобы разрешить такого рода уступки, не имеет смысла, чтобы иметь + возвращает неконстантное значение? Это можно сделать, добавив const_casts, но это становится довольно громоздким, не так ли?
Спасибо!