Меня немного смущает, почему мне сказали возвращать const foo из бинарного оператора в c ++ вместо просто foo.
Я читал «Мышление в C ++» Брюса Экеля, и в главе о перегрузке операторов он говорит, что «делая возвращаемое значение [перегруженного двоичного оператора] const, вы утверждаете, что только const Функция-член может быть вызвана для этого возвращаемого значения. Это const-правильное решение, поскольку оно не позволяет хранить потенциально ценную информацию в объекте, который, скорее всего, будет утерян ».
Однако, если у меня есть оператор плюс, который возвращает const, и оператор приращения префикса, этот код недействителен:
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, но это довольно громоздко, не так ли?
Спасибо!