¿Confusión con respecto al propósito / comportamiento de la devolución de datos agregados?
Mientras mira elOpciones de advertencia de GCC, Me encontré con-Gregarse-retorno.
-Gregarse-retorno
Avisar si se definen o llaman funciones que devuelven estructuras o uniones. (En los idiomas en los que puede devolver una matriz, esto también provoca una advertencia).
Pequeño ejemplo que provoca la advertencia:
class foo{};
foo f(void){return foo{};}
int main(){}
$ g ++ -std = c ++ 0x -Waggregate-return -o main main.cpp
main.cpp: En la función ‘foo f ()’:
main.cpp: 2: 5: warning: function devuelve un agregado [-Waggregate-return]
Otro pequeño ejemplo que no provoca la advertencia:
#include <string>
std::string f(void){return "test";}
int main(){}
¿Cuál es el beneficio obtenido al usar -Waggregate-return?
¿Por qué alguien querría ser advertido sobre esto?
Además, ¿no es std :: string una clase? ¿Por qué no advertí sobre el 'agregado devuelto' en el segundo ejemplo?