Pregunta

este artículo de Wikipedia señaló por uno de los respondedores a la siguiente pregunta:

C ++ constructor de copia, temporales y copiar semántica

Me encontré con esta línea

  

Dependiendo del compilador, y la configuración del compilador, el programa resultante puede mostrar cualquiera de las siguientes salidas:

¿Esto no califican para un comportamiento indefinido? Sé que el artículo dice Depending on the compiler and settings pero sólo quiero aclarar esto.

¿Fue útil?

Solución

Sin comportamiento, no es indefinido. comportamiento no definido tiene una definición específica en la norma (en su mayoría: "el comportamiento, como pudiera surgir durante el uso de una construcción errónea programa o datos erróneos, por lo que esta norma no impone requisitos") En este caso, el comportamiento no está especificada, pero no indefinido.

La diferencia es que cualquier ejecución de cualquier cosa con un comportamiento indefinido hace que todo el comportamiento de su programa no definido (es decir, cualquier cosa puede suceder). Con este comportamiento no especificado en particular, sólo una de dos cosas puede suceder: o bien se ejecuta el constructor de copia, o no lo hace

.

Otros consejos

No. El comportamiento se define como una de las salidas de la lista. un comportamiento indefinido incluye demonios que vuelan fuera de su nariz.

Ver: nasal demonios

indefinido comportamiento es bastante diferente de aplicación definido el comportamiento , que es lo que está en juego aquí.

Depende de lo que entendemos por indefinido. Creo que lo que han dicho aquí - por la definición de los estándares de documentos utilización. Pero también sé que cuando alguien dice "esto o aquello, no estoy diciendo que lo que" creo en él como un comportamiento indefinido.

No es un gran problema, sin embargo, ya que nunca debe causar un error. Al definir ciertos métodos, se espera que definirlos siguientes convenciones particulares -. Que es un tipo de contrato implícito entre usted, el compilador y las personas que van a utilizar y mantener el código

En este caso, si se obtiene una copia etc-constructo o el comportamiento optimizado, se espera que el efecto sea el mismo - la persona que llama recibe el valor deseado. Si el constructor de copia se imprime "Hello World!" o tiene otros efectos secundarios inapropiadas, no está implementando el comportamiento esperado de un constructor, por lo que la culpa es suya para romper el contrato.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top