Зачем возвращать постоянное значение? Подумайте над следующим (и, пожалуйста, извините, не названные имена переменных):
struct A { int a; };
A operator+(const A& a1, const A& a2)
{
A a3 = { a1.a + a2.a };
return a3;
}
Учитывая это объявление operator+
, я могу сделать следующее:
A a = {2}, b = {3}, c = {4}, d = ((a+b) = c);
Правильно, я просто назначил временный A
, который был возвращен operator+
. Результирующее значение d.a
равно 4, а не 5. Изменение типа возвращаемого значения с operator+
на const A
предотвращает это назначение, в результате чего выражение (a+b) = c
вызывает ошибку компилятора.
Если я пытаюсь присвоить указатель или целое число, возвращаемое функцией, мой компилятор (MSVC) генерирует ошибку «левый операнд должен быть l-значением», что, по-видимому, согласуется с тем, что компилятор ARM сообщает вам, что константа Указатель не имеет смысла - указатель не может быть назначен в любом случае. Но для классов / структур, очевидно, можно присвоить неконстантные возвращаемые значения.