Zamieszanie w odniesieniu do celu / zachowania -Waggregate-return?
Patrząc naOpcje ostrzegawcze GCC, Przeszedłem przez-Waggregate-return.
-Waggregate-return
Ostrzegaj, jeśli jakiekolwiek funkcje zwracające struktury lub związki są zdefiniowane lub wywołane. (W językach, w których możesz zwrócić tablicę, wywołuje to również ostrzeżenie.)
mały przykład, który wywołuje ostrzeżenie:
class foo{};
foo f(void){return foo{};}
int main(){}
$ g ++ -std = c ++ 0x -Waggregate-return -o main main.cpp
main.cpp: W funkcji „foo f ()”:
main.cpp: 2: 5: warning: funkcja zwraca agregat [-Waggregate-return]
kolejny mały przykład, który nie wywołuje ostrzeżenia:
#include <string>
std::string f(void){return "test";}
int main(){}
Jakie korzyści uzyskuje się dzięki użyciu opcji -Waggregate-return?
Dlaczego ktoś chciałby być o tym ostrzegany?
Ponadto, czy std :: string nie jest klasą - dlaczego nie ostrzegłem o „zwróconym agregacie” w drugim przykładzie?