Lo primero es lo primero:
$ 12.3.1/1 - "Un constructor declara sin la función especificador explícita especifica una conversión de los tipos de sus parámetros al tipo de su clase. Tal constructor se llama constructor de conversión. "
En su ejemplo, INT es una clase definida por el usuario que tiene un constructor de conversión de 'int'.
Por lo tanto está bien formado el siguiente código:
INT i(1024); // direct initialization syntax
Esto significa que se puede obtener un objeto INT de un número entero. Sin embargo, ¿qué hace uno si el objeto INT se debe volver a convertir en un número entero? Transitividad?
Se puede decir que el INT clase puede proporcionar una función miembro para devolver el miembro de número entero encapsulado
int x = i.geta();
Sin embargo, esto no es muy intuitivo y no es un método estándar.Tampoco es intuitivo cuando se trata de cómo funcionan los tipos incorporados en tales situaciones.
int z = 0;
int y1 = z; // copy initialization or
int y2(z); // direct initialization
double d = (int)z; // explicit cast
para ello la norma permite dicha normalización e intuición de conversión de tipos definidos por el usuario diciendo:
$ 12,3/2 - "Una función miembro de una X clase no tener parámetros con un nombre de la forma [...]
operador de conversión de tipo-id
[ ...] especifica una conversión de X al tipo especificado en id-conversión-tipo. Tales funciones son llamadas funciones de conversión. No se puede especificar el tipo de devolución . Si una función de conversión es una función miembro, el tipo de la función de conversión (8.3.5) es "función que no toma el parámetro de conversión-id".
Esto hace que todos los siguientes bien formados y conserva armonía con la forma integrada de los tipos de trabajo es
int y1 = i; // copy initialization or
int y2(i); // direct initialization
double d = (int)i; // explicit cast
¿Qué código en negrita? De lo contrario, es básicamente un contenedor para 'int' con conversión a' int' y operador '++'. –
Al mirar la fuente de la publicación original, 'operator int()' se supone que es el código en negrita. –
Si pudiera, honestamente votaría para volver a abrir esto. La pregunta original tenía un formato pobre, pero tenía un segmento de código claramente en negrita. Una edición posterior (no realizada por el OP) fue lo que hizo que el código no fuera audaz y, por lo tanto, hizo que la pregunta pareciera incoherente. – eldarerathis