¿Funcionará la deducción automática del tipo de devolución para main?


Seré capaz de hacer lo siguiente para la función principal en C++1y (C++14):

auto main()
{
    // ...
}

Entonces, ¿el tipo devuelto será automáticamente int aunque no necesitemos usar un return 0; explícito?

 27
Author: chris, 2013-06-16

1 answers

No, no se permitirá. El párrafo 7.1.6.4 / 10 del borrador estándar de C++14 N3690 especifica:

Si una función con un tipo de retorno declarado que usa un tipo de marcador de posición no tiene instrucciones return, el retorno type se deduce como si de una instrucción return sin operando en la llave de cierre de la función cuerpo. [...]

Esto significa que omitir una instrucción return en main() haría su tipo void.

La norma especial introducida por el párrafo 3.6.1 / 5 acerca de fluir del final de main() especifica:

[...] Si el control llega al final de main sin encontrar una instrucción return, el efecto es el de ejecutar

return 0;

La redacción dice que el" efecto " durante la ejecución del programa es el mismo que si un return 0 estaba presente, no que una declaración return se agregará al programa (lo que afectaría la deducción de tipo de acuerdo con la cita apartado).

EDITAR:

Hay un Informe de defectos para esto (cortesía de Johannes Schaub):

Propuesta de resolución (noviembre de 2013):

Cambio 3.6.1 [básico.empezar.main] paragraph 2 as follows:

Una aplicación no definirá previamente la función principal. Esta función no se sobrecargará. Tendrá un declarado tipo de retorno de tipo int, pero por lo demás su tipo es implementación-definida. Todas las implementaciones Una aplicación permitirá tanto{[17]]}

  • una función de () volviendo int y
  • una función de (int, puntero a puntero a char) devuelve int

Como el tipo...

 23
Author: Andy Prowl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:22:59