Jest C4172 Ostrzeżenie Visual C++ dla przypadków, gdy funkcja zwraca adres lokalnego lub tymczasowego lub odniesienie do zmiennej lokalnej.Czy są jakieś scenariusze, w których ostrzeżenie C4172 Visual C++ nie powinno być uważane za błąd?
coś takiego:
int& fun()
{
int var;
return var; //C4172
}
Teraz wygląda na to, że jest to dobry pomysł, aby użyć #pragma warning
aby Visual C++ leczenia C4172 jako błąd i złamać kompilację.
Czy są jakieś rozsądne scenariusze, w których C4172 w rzeczywistości nie jest błędem?
Więc chcesz wiedzieć, czy to jest w porządku, aby traktować go trwale jako błąd - znaczenie: dlaczego została ona zdefiniowana jako ostrzeżenie na początek? Świetne pytanie. –
Najprawdopodobniej nie, a kompilator ma rację, przedstawiając go jako błąd diagnostyczny, a nie jako kompilację, ponieważ nieokreślonym zachowaniem jest zwracanie odwołania do błędu składni lokalnej, a nie błędu składni języka. Dlaczego nie zdefiniowano go jako błąd składni języka? Ponieważ nie jest to błąd składniowy. –
@jim mcnamara: Tak, masz rację. – sharptooth