c++ - ejemplo - auto en c
¿La deducción del tipo de devolución automática obliga a varias funciones a tener el mismo tipo de devolución? (2)
Considere el siguiente fragmento:
struct A
{
auto foo(), bar();
};
auto A::foo() { return 1; }
auto A::bar() { return ''a''; }
int main()
{
}
Compila bien en Clang ++ 3.7.0.
fails en G ++ 5.2.0:
main.cpp: In member function ''auto A::bar()'':
main.cpp:7:24: error: inconsistent deduction for ''auto'': ''int'' and then ''char''
auto A::bar() { return ''a''; }
¿La deducción del tipo de retorno automático fuerza varias funciones, declaradas en una sola declaración, para tener el mismo tipo de devolución?
En función de lo siguiente, GCC tiene el comportamiento correcto en este caso, pero solo por coincidencia (ver a continuación):
§7.1.6.4 [dcl.spec.auto] / 8
Si la lista init-declarator contiene más de un init-declarator, todos deberán formar declaraciones de variables.
¿Por qué solo por coincidencia? El mensaje de error es una pista. Al cambiar las funciones para deducir el mismo tipo de retorno, GCC compila el código. Si bien es correcto dar un error aquí, aunque engañoso, solo lo hace cuando el tipo deducido es inconsistente. Siempre debería dar un error.
Sí.
auto
no significa "cualquier tipo", significa un tipo específico que el compilador debe deducir.
Esto no es específico de las declaraciones de funciones, auto i = 1, f = 4.7;
tampoco funciona
Además, declarar múltiples funciones en una sola declaración no parece ser una buena idea de todos modos.