Perché restituire un valore const? Si consideri il seguente (e vi prego di scusare i nomi delle variabili privo di fantasia):
struct A { int a; };
A operator+(const A& a1, const A& a2)
{
A a3 = { a1.a + a2.a };
return a3;
}
Dato che la dichiarazione di operator+
, posso effettuare le seguenti operazioni:
A a = {2}, b = {3}, c = {4}, d = ((a+b) = c);
Proprio così, ho appena assegnato alla temporanea A
che è stato restituito da operator+
. Il valore risultante di d.a
è 4, non 5.La modifica del tipo restituito da operator+
a const A
impedisce questo incarico, causando l'espressione (a+b) = c
per generare un errore del compilatore.
Se provo ad assegnare un puntatore o un intero restituito da una funzione, il mio compilatore (MSVC) genera un errore "l'operando sinistro deve essere di tipo l", che sembra coerente con il compilatore ARM che ti dice che la costanza di il puntatore non ha significato: il puntatore non può essere assegnato comunque. Ma per le classi/le strutture, a quanto pare va bene assegnare a valori di ritorno non const.
Quali flag di compilazione e compilazione stai utilizzando? – Trent
RVCT 3.1 e non so cosa contrassegna l'intestino dei flag del sistema di compilazione sono nascosti a noi semplici mortali – Dynite