Скажем, у меня есть этот код:
unsigned int func1();
unsigned int func2();
unsigned int func3();
unsigned int x = func1() | func2() | func3();
Гарантирует ли С++, что func1() будет вызываться первым, затем func2(), а затем func3()?
Или компилятор разрешен для вызова функций в любом порядке, в котором он выглядит?
Кроме того, компилятор разрешил реализовать оптимизацию короткого замыкания здесь, если он хочет? (например, если func1() возвращен ~ 0, может ли компилятор решить не беспокоить вызовы func2() или func3(), потому что он знает, что их возвращаемые значения не могут повлиять на значение, присвоенное x?)