2011-05-01 8 views
7

que tienen una función que tiene este aspecto:¿Es seguro para acceder a un argumento predeterminado por referencia?

class SomeClass { 
    // ... 
}; 

void some_function(const SomeClass& arg = SomeClass()); 

La función some_function accesos su argumento por referencia y tiene un valor por defecto. ¿Es seguro hacer esto o la referencia será inválida cuando llamo a la función sin un argumento?

+0

Me sorprende ver una 14K usuario hacer esta pregunta !! (sin ofender) – Sherif

+3

@mavric: ¿Quién dice que el representante se obtuvo responder a las preguntas C++ representante de una persona es bastante confía irrelevant- mí, estoy 26k – Puppy

+0

@mavric soy un Java/Scala?! programador, que ha sido un largo tiempo que he escrito ninguna seria programa en C++, por lo que mi C++ es un poco oxidado sólo estoy jugando con él de nuevo como un hobby – Jesper

Respuesta

8

Sí, es seguro. Una referencia const vinculada a un temporal extiende la vida de ese temporal a la duración de la referencia. Lo mismo es cierto para las referencias rvalue.

4

Será válida. El tiempo de vida del temporal que se utiliza como valor por defecto es un superconjunto de la vida útil de la llamada a la función. Esto tampoco es diferente de si hubiera pasado de forma temporal (los argumentos predeterminados son básicamente azúcar sintáctica, lo que le ahorra escribir, pero se comporta de forma más o menos idéntica a los argumentos pasados ​​explícitamente.

Cuestiones relacionadas