(Consulta) Preferencia entre operadores

Iniciado por Seyro97, 24 Octubre 2015, 08:39 AM

0 Miembros y 1 Visitante están viendo este tema.

Seyro97

Hola, muy buenas. Con el fin de investigar un poco sobre la preferencia entre operadores, hice el siguiente programa:

Código (cpp) [Seleccionar]
#include <iostream>

int Mostrar(const char *lpszMensaje);

int main() {
    //(*(int *)(&(std::cout << "Izquierda->"))) + (*(int *)(&(std::cout << "Centro->"))) * (*(int *)(&(std::cout << "Derecha->")));
    Mostrar("Izquierda->") + Mostrar("Centro->") * Mostrar("Derecha->");

    std::cin.get();
    return 0;
}

inline int Mostrar(const char *lpszMensaje) {
    std::cout << lpszMensaje;

    return 0;
}


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:

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:

g++ -o main.exe main.cpp
Trabajando con MinGW-w64 desde Windows
Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!

ivancea96

¿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.

Seyro97

Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!

ivancea96

De todos modos, en caso de operadores booleanos:

Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

bool func(string a, bool t){
cout << a;
return t;
}

int main(){
(func("A", true) || func("B", true));
cout << endl;
(func("A", false) && func("B", true));
}


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

Seyro97

Claro, tiene todo el sentido xD. Gracias por sus respuestas :D
Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!