¿Las versiones anteriores de C ++ utilizaron el operador `int` de una clase al evaluar la condición en una declaración` if () `?
Las versiones modernas de C ++ intentan utilizar elbool
operador de una clase al evaluar la condición en unaif()
declaración. Otros operadores de fundición, tales comoint
siendo usado cuando nobool
el operador existe Esto se demuestra a continuación.
#include <iostream>
using namespace std;
class TwoInts {
public:
int a,b;
operator bool() { cout << "TwoInts to bool" << endl; return 0;}
operator int() { cout << "TwoInts to int" << endl; return 0;}
};
class SixInts {
public:
int a[6];
operator int() { cout << "SixInts to int" << endl; return 0;}
};
int main(void) {
TwoInts T;
SixInts S;
if (T) cout << "xxx" << endl;
if (S) cout << "xxx" << endl;
return 0;
}
Ejecutar este código no produce sorpresas:
TwoInts to bool
SixInts to int
Mirando un código antiguo de C ++, parece haber un cambio que me gustaría verificar.
¿Las versiones anteriores de C ++ usaron elint
operador de una clase al evaluar la condición en unaif()
¿declaración? ¿Qué versiones, si las hay, hicieron eso?
La salida sugerida entonces habría sido
TwoInts to int
SixInts to int
Algunos detalles sobre por qué la pregunta: problemas con la conversión de una antigua clase de enteros grandesmayo ser debidoint
contrabool
en unaif()
. Ya no tiene acceso al compilador anterior, por lo que no puede probar el comportamiento anterior.
[Editar]
Usando las respuestas a continuación y un poco más de investigación:
Responder:Sí, muchas versiones pre ISO Standard C ++ (mediados de la década de 1980 -1998), que carecían debool
usé moldes paraint
(u otros tipos numéricos). Variación significativa del compilador existió - erapre-estándar.
El primer estándar C ++ ISO salió en 1998 (ISO / IEC 14882: 1998, también conocido como C ++ 98). Definió labool
tipo. Así, la norma ISO C ++ siempre ha utilizado elbool
echar enif()
.