¿Son obligatorios los operadores lógicos de cortocircuito? ¿Y orden de evaluación?

Cumple con el estándar ANSImandat los operadores lógicos a cortocircuitar, ya sea en C o C ++?

Estoy confundido porque recuerdo el libro de K&R que dice que su código no debería depender de que estas operaciones se cortocircuiten, ya que es posible que no lo hagan. ¿Podría alguien indicar dónde en el estándar se dice que las operaciones lógicas siempre están en cortocircuito? Estoy principalmente interesado en C ++, una respuesta también para C sería genial.

También recuerdo haber leído (no recuerdo dónde) que el orden de evaluación no está estrictamente definido, por lo que su código no debería depender o asumir que las funciones dentro de una expresión se ejecutarían en un orden específico: al final de una declaración se hace referencia a todos se habrán llamado a funciones, pero el compilador tiene libertad para seleccionar el orden más eficiente.

El estándar indica el orden de evaluación de esta expresión?

if( functionA() && functionB() && functionC() ) cout<<"Hello world";

Respuestas a la pregunta(7)

Su respuesta a la pregunta