Si bien esto es C y no C ++, estoy seguro de que la respuesta es la misma en ambos. La respuesta está en el orden de las operaciones.
Saquemos esto del mundo de posibilidades predefinidas y digamos que estamos trabajando con nuestra propia clase personalizada “Integer” (que existe en Java pero no en C / C ++, así que puedo tomarla prestada para este escenario) y hemos sobrecargado el operador> (probablemente los otros operadores relacionales también, pero para esto al menos el operador>) funcione como uno esperaría para una operación binaria. Entonces, ¿cómo sería una función de operador binario sobrecargado?
boolean Integer :: operator> (const Integer & objInteger) const
{
return (getValue ()> objInteger);
}
- En términos absolutos, ¿qué son los transistores y los semiconductores?
- ¿Qué motiva el problema de k-satisfacción en la informática teórica?
- ¿Pueden los lenguajes naturales ser completamente modelados por las máquinas de Turing?
- Estoy interesado en algoritmos. Planeo hacer una maestría en informática teórica en una de las 20 mejores universidades. ¿Cuán significativamente ayudará a hacerme digno de la industria?
- Cómo resolver la Competencia de Computación Canadiense de 1996, Etapa 1, Problema C (vea el enlace del problema a continuación)
Ahora eso funciona para explicar 100> 90, pero ¿qué pasa con el otro? Bueno, encadena. Es esencialmente:
Entero (100) .operador> (90) .operador> (80);
Dado que el operador> no devuelve un entero (o incluso un int), veamos otra regla de C / C ++, que los booleanos pueden ser percibidos / auto-emitidos como enteros y viceversa por esta regla: True es cualquier valor> 0 y False es 0. Si se convierte de boolean a int / short / numeric, se convertirá en el valor 1. Entonces, tenemos verdadero (1) para la primera operación. Consideremos que Integer tiene un constructor de conversión que pasa en un booleano que sigue esa regla o un int o ambos y el resultado ahora se convierte en un nuevo Entero.
Entero (100.operador> (90) = Entero (1);
Entero (1)> 80;
Entero (1) .operador> (80);
Esto debería devolver falso y falso equivale a 0 en términos numéricos.