Después de una extensa lectura de ISO/IEC 14882, Programming language – C++ Todavía estoy seguro de por qué const
se necesita para la conversión implícita de un tipo definido por el usuario con un único constructor sin argumentos como el siguiente¿Por qué const para la conversión implícita?
#include <iostream>
class X {
public:
X(int value) {
printf("constructor initialized with %i",value);
}
}
void implicit_conversion_func(const X& value) {
//produces "constructor initialized with 99"
}
int main (int argc, char * const argv[]) {
implicit_conversion_func(99);
}
Comenzando con la sección 4 línea 3
Una expresión e se puede convertir implícitamente en un tipo T si y solo si la declaración T t = e; está bien formado, por alguna variable temporal inventada t (8.5). Ciertas construcciones de lenguaje requieren que una expresión se convierta en un valor booleano. Se dice que una expresión e que aparece en dicho contexto se convierte contextualmente a bool y está bien formada si y solo si la declaración bool t (e); está bien formado, por alguna variable temporal inventada t (8.5). El efecto de cualquiera de las conversiones implícitas es el mismo que realizar la declaración y la inicialización y luego usar la variable temporal como resultado de la conversión. El resultado es un lvalue si T es un tipo de referencia lvalue (8.3.2), y un valor r de otra manera. La expresión e se usa como un valor l si y solo si la inicialización lo usa como un valor l.
Después de haber encontrado el apartado de inicializadores relacionadas con los tipos definidos por el usuario en 8.5 línea 6
Si un programa llama a la inicialización por defecto de un objeto de un tipo T const cualificado, T será un tipo de clase con un constructor predeterminado proporcionado por el usuario.
Finalmente I finalizó en 12,3 línea 2 acerca de las conversiones definidas por el usuario que establece
conversiones definidas por el usuario se aplican sólo donde están los inequívoca (10.2, 12.3.2).
No hace falta decir que 10.2 y 12.3.2 no respondieron mi pregunta.
- Puede alguien arrojar alguna luz sobre el efecto que tiene sobre
const
conversiones implícitas? - ¿El uso de
const
hace que la conversión sea "no ambigua" por 12.3 línea 2? - ¿De alguna manera afecta
const
a lvalue vs. rvalue de la sección 4?
¿No te encanta C++? –