valores una todas tipos retornan que parametros llamar lenguaje las funciones funcion estructura ejemplos con como c++ scope initializer-list

c++ - todas - Alcance de una variable inicializada en la lista de parámetros de una función



tipos de funciones en lenguaje c (2)

Aquí, el valor se materializó para crear un objeto temporal de tipo S partir de la lista de {4,5} , que se destruye al final de la expresión completa. En su caso foo({4,5}); .

El siguiente código crea, compila y ejecuta (C ++, mingw) aparentemente sin ningún problema. Sin embargo, ¿tengo garantizado que los objetos construidos con las listas de inicializadores dentro de la lista de parámetros de una función viven a lo largo del alcance de esa función, aunque la función tome el argumento por referencia?

Si no es así, ¿es cierto que al crear un objeto utilizando su lista de inicializadores en la lista de parámetros de una función (que toma el argumento por referencia) puede ser peligroso porque se destruirá de inmediato? En este caso, la función no tiene una ¿Copia, pero una referencia a la memoria que puede, o no puede ser reasignada por otro proceso?

struct S { S() : a(0), b(0) {} S(int a, int b) : a(a), b(b) {} int a; int b; }; void foo(const S& s) { std::cout << "s.a = " << s.a << std::endl; std::cout << "s.b = " << s.b << std::endl; } int main() { foo({4,5}); // <-- What is the scope of the struct initialized here? return 0; }


Según cppreference [vida útil] :

Todos los objetos temporales se destruyen como último paso en la evaluación de la expresión completa que contiene (léxicamente) el punto donde se crearon, y si se crearon múltiples objetos temporales, se destruyen en el orden opuesto al orden de creación. Esto es cierto incluso si la evaluación termina con una excepción.

Eso significa que el objeto temporal se destruirá después de que la función haya regresado, por lo que es perfectamente seguro.