Test Foro de elhacker.net SMF 2.1

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