Decir que tengo este código:¿Se garantiza por bitwise u orden de evaluación?
unsigned int func1();
unsigned int func2();
unsigned int func3();
unsigned int x = func1() | func2() | func3();
que C++ hace garantiza que func1() será llamado primero, y luego func2(), y luego func3()?
¿O al compilador se le permite llamar a las funciones en el orden en que se siente?
Además, ¿se permite al compilador implementar aquí una optimización de cortocircuito si así lo desea? (por ejemplo, si func1() devolvió ~ 0, ¿podría el compilador decidir no molestarse en llamar a func2() o func3(), porque sabe que sus valores de retorno no pueden afectar el valor asignado a x?
No pertenece a la pregunta, sino a una respuesta ahora eliminada: ¿Tres votos a favor sin comentarios? Vamos chicos, compartan el conocimiento, no sean tontos. @Answerer: la primera parte de su respuesta es incorrecta, las subexpresiones se pueden evaluar en * cualquier orden *; esta es probablemente la razón por la que fueron vituperados. – GManNickG