C/Visual C - Por qué comipla

 
Vista:

Por qué comipla

Publicado por el_mogur (202 intervenciones) el 10/12/2004 14:06:34
Hola,

¿Alguien me puede decir por qué compila la siguiente línea de código? (Al menos en Borland C++ Builder 5.0...)

( (a > 0) ? a : b ) = 8;

Eso significa que la asignación se hace a 'a' o a 'b' dependiendo del valor de 'a'... pero entonces, significa que la expresión del operador ternario, tiene tipo "int&"...

Vamos, mi pregunta se puede hacer de otra forma. Cuando vemos algo como:

int a, b;

Sabemos que la expresión "a + b" tiene tipo int, porque entendemos el funcionamiento del operador +, pero... ¿cómo obtiene el compilador el tipo de una expresión con el operador ternario?

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Por qué comipla

Publicado por Nicolas (183 intervenciones) el 10/12/2004 16:26:03
Hola!!!!!!!!!

Pasa q el operador ternario devuelve una referencia y el = tambien. Pensa q si sobrecargas el operator = en una clase tuya, deberias estar devolviendo una referencia al objeto (return *this) => es por eso que anda

Salu2!!!!!!!!!!!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Por qué comipla

Publicado por el_mogur (202 intervenciones) el 11/12/2004 12:54:30
Si el operador ternario devolviera una referencia, algo como

(a > 0) ? 3 : 1

no compilaría, porque no se pueden devolver referencias a esas constantes.

Y eso tiene que ver con cómo obtiene el compilador el tipo de esa expresión, para saber si su resultado se lo puede asignar a un int o a donde...

(a > 0) ? "a" : "b"

Pero ya he encontrado un sitio donde ponen las reglas:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_pluslang_Expressions_with_the_Conditional_Operator.asp

Gracias!

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar