2012-03-19 21 views

Respuesta

7

La forma

X x = 42; 

requiere que el constructor no sea explícita y que haya un constructor de copia accesible. La implementación permite construir un archivo temporal y copiarlo, pero ninguna implementación que conozco hace eso.

+0

¿Supondría eso un operador de asignación explícito? Pensé que tomaría esa ruta. Pero mi cerebro ha sido un tanto confuso. –

+2

No, no está permitido construir un temporal. ¿Lo estás confundiendo con 'X x = X (42)'? – Pubby

+3

@Pubby: Sí, así es, esto se conoce como _copy initialization_ por alguna razón. ; -] Aunque en la práctica, siempre se eliminará. – ildjarn

5

semánticamente las dos operaciones son diferentes según el lenguaje de la memoria, pero los resultados efectivos después de la compilación son los mismos en las siguientes circunstancias:

  1. Hay un constructor único argumento para X que puede tomar una integral -type y el tipo de argumento no es una referencia de valores l no const.
  2. Hay un único constructor de argumentos para X donde un tipo integral se puede convertir al tipo de argumento, y donde el argumento no es de nuevo no const l-value reference
  3. En el caso de # 2, el constructor no se ha declarado como explicit
+4

Esa es una oración * larga *. – avakar

+0

Haha, cierto ... corregido :-) – Jason