Hola, muy buenas. Con el fin de investigar un poco sobre la preferencia entre operadores, hice el siguiente programa:
#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
¿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.
Ahh vale. Gracias!
De todos modos, en caso de operadores booleanos:
#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.
Claro, tiene todo el sentido xD. Gracias por sus respuestas :D