Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Seyro97 en 24 Octubre 2015, 08:39 am



Título: (Consulta) Preferencia entre operadores
Publicado por: Seyro97 en 24 Octubre 2015, 08:39 am
Hola, muy buenas. Con el fin de investigar un poco sobre la preferencia entre operadores, hice el siguiente programa:

Código
  1. #include <iostream>
  2.  
  3. int Mostrar(const char *lpszMensaje);
  4.  
  5. int main() {
  6.    //(*(int *)(&(std::cout << "Izquierda->"))) + (*(int *)(&(std::cout << "Centro->"))) * (*(int *)(&(std::cout << "Derecha->")));
  7.    Mostrar("Izquierda->") + Mostrar("Centro->") * Mostrar("Derecha->");
  8.  
  9.    std::cin.get();
  10.    return 0;
  11. }
  12.  
  13. inline int Mostrar(const char *lpszMensaje) {
  14.    std::cout << lpszMensaje;
  15.  
  16.    return 0;
  17. }

Lo que yo me esperaba es que se ejecutara Mostrar("Centro->") * Mostrar("Derecha->"), y después Mostrar("Izquierda->") más el resultado anterior, ya que el operador * tiene preferencia sobre el +, pero la salida del programa ha sido la siguiente:

Código:
Izquierda->Centro->Derecha->

Es decir, que ¿en teoría se habría ejecutado primero la suma, y después el producto? No lo entiendo... Si alguien me lo pudiera explicar... Gracias!

PD.: En el compilador he puesto que no optimice el código. Comando usado:

Código:
g++ -o main.exe main.cpp
Trabajando con MinGW-w64 desde Windows


Título: Re: (Consulta) Preferencia entre operadores
Publicado por: ivancea96 en 24 Octubre 2015, 12:46 pm
¿Qué van primero, los paréntesis o las multiplicaciones? Ahí tu respuesta. Las funciones, si bien no son paréntesis, se resuelven primero. Dado que las funciones están en ese orden, en ese orden se llaman.


Título: Re: (Consulta) Preferencia entre operadores
Publicado por: Seyro97 en 25 Octubre 2015, 02:03 am
Ahh vale. Gracias!


Título: Re: (Consulta) Preferencia entre operadores
Publicado por: ivancea96 en 25 Octubre 2015, 14:05 pm
De todos modos, en caso de operadores booleanos:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. bool func(string a, bool t){
  6. cout << a;
  7. return t;
  8. }
  9.  
  10. int main(){
  11. (func("A", true) || func("B", true));
  12. cout << endl;
  13. (func("A", false) && func("B", true));
  14. }

Si la condición se cumple (o no se cumple) definitivamente, no se llama al resto de funciones.


Título: Re: (Consulta) Preferencia entre operadores
Publicado por: Seyro97 en 25 Octubre 2015, 20:10 pm
Claro, tiene todo el sentido xD. Gracias por sus respuestas :D