Riferimento costante al temporaneo
Domanda
Dopo aver letto Questo articolo sul blog di Herb Sutter, ho sperimentato un po' e mi sono imbattuto in qualcosa che mi ha lasciato perplesso.Sto utilizzando Visual C++ 2005, ma sarei sorpreso se dipendesse dall'implementazione.
Ecco il mio codice:
#include <iostream>
using namespace std;
struct Base {
//Base() {}
~Base() { cout << "~Base()" << endl; }
};
int main()
{
const Base & f = Base();
}
Quando eseguito, viene visualizzato "~Base()
" due volte...Ma se rimuovo il commento dal costruttore, lo visualizza solo una volta!
Qualcuno ha una spiegazione per questo?
Soluzione
Questo dipende dall'implementazione.
Lo standard consente che venga eseguita una copia quando si associa un riferimento temporaneo a un riferimento const.Nel tuo caso, VC++ esegue una copia solo quando il costruttore è definito implicitamente.Ciò è inaspettato, ma consentito.
C++1x risolverà questo problema.