string foo() { return "hello"; }
int main()
{
//below should be illegal for binding a non-const (lvalue) reference to a rvalue
string& tem = foo();
//below should be the correct one as only const reference can be bind to rvalue(most important const)
const string& constTem = foo();
}
- GCC è quello buono che invia un errore compilazione: inizializzazione valido di riferimento non const di tipo
std::string&
da un temporaneo di tipostd::string
- VS2008 non è male come almeno dà un compilazione avvertimento: C4239 avviso: estensione non standard utilizzata: 'inizializzazione': conversione da
std::string
astd::string &
a riferimento non-const può essere associato solo ad un Ivalue - Ecco la problematica: VS2010 (SP1) compatta bene SENZA qualsiasi errore , PERCHÉ ?? !! Io so il riferimento di valore in VS2010 può essere utilizzato per eseguire il bind con il valore di rvalue ma NON sto usando
&&
, invece nel codice demo, stavo usando solo il riferimento di lvalue non-const!
Qualcuno può aiutarmi a spiegare il comportamento di VS2010 qui? E 'un errore !? GrazieUn bug VS2010? Permettere il riferimento non const-vincolante al rvalore SENZA UN EVENTO?
quali sono le impostazioni di avviso? Forse è la tua configurazione che è cambiata, e non la loro implementazione? –
Utilizzo VS2008 da un po 'di tempo ma recentemente ho installato VS2010, quindi VS10 dovrebbe usare le impostazioni predefinite ... – Gob00st
quindi temo che la soglia di avviso non sia abbastanza alta. Usa '\ W4' per attivare gli avvertimenti nell'intervallo' 4xxx'. –