C'è l'avviso C4172 Visual C++ per i casi in cui una funzione restituisce un indirizzo locale o temporaneo o un riferimento a una variabile locale.Esistono scenari in cui l'avviso C4172 Visual C++ non deve essere considerato un errore?
Qualcosa di simile a questo:
int& fun()
{
int var;
return var; //C4172
}
Ora sembra che sia una buona idea usare #pragma warning
per rendere Visual C++ trattare C4172 come errore e rompere la compilazione.
Esistono scenari sane in cui C4172 non è effettivamente un errore?
Quindi, si vuole sapere se va bene a trattarlo in modo permanente come un errore - che significa: perché è stato definito come un avvertimento per iniziare? Grande domanda. –
Probabilmente no, e il compilatore ha ragione a fornirlo come errore diagnostico e non come compilazione perché è un comportamento indefinito per restituire il riferimento a un errore di sintassi locale e non a un linguaggio. Perché non è definito come errore di sintassi della lingua? Perché non è un errore di sintassi. –
@jim mcnamara: Sì, hai ragione. – sharptooth