valor tipos salida referencia realiza qué por paso parametros llamada función funciones entrada argumentos c++ language-lawyer noexcept

c++ - tipos - qué función realiza, la función return en la función main



especificador de noexcept con la construcción de argumentos por defecto (1)

Toma el siguiente código de ejemplo:

void test(const Item& item = Item()) { ... }

Supongamos que, una vez item se ha pasado el elemento a la función, esto no se puede lanzar.

La pregunta es: la función debe estar marcada como noexcept o noexcept(noexcept(Item())) ?

IHMO, el primero debería estar bien, pero no estoy seguro. ¡Una cita de la norma sería muy apreciada!


Los argumentos predeterminados son notaciones de acceso directo para el llamador de la función. Entonces, cuando la función se ejecuta, la construcción ya está completa.

Por lo tanto, la noexcept debe ser suficiente.

En el standard [dcl.fct.default] declara:

Si se especifica una cláusula de inicialización en una declaración de parámetros, esta cláusula de inicialización se utiliza como un argumento predeterminado. Los argumentos predeterminados se utilizarán en las llamadas donde faltan los argumentos finales.

Ejemplo: la declaración de void point(int = 3, int = 4); declara una función que se puede llamar con cero, uno o dos argumentos de tipo int. Se puede llamar de cualquiera de estas formas: point(1,2); point(1); point(); Las dos últimas llamadas son equivalentes al point(1,4) y al point(3,4) , respectivamente.

También hay una nota (en [ejecución de programa intro.execution]):

Las subexpresiones involucradas en la evaluación de los argumentos predeterminados (8.3.6) se consideran creadas en la expresión que llama a la función, no en la expresión que define el argumento predeterminado