Определенный порядок оценки аргументов приводит к под-оптимальному коду?

Известно, что порядок вычисления аргументов в C и C++ не определен :. например:foo(a(),b())В приведенном выше вызове реализация компилятора должна решить, какой порядок вычислений выбрать и, следовательно, какую функцию выполнить первой. Недавно один из моих друзей спросил, почему в C или C++ порядок вычислений не указан. Когда я погуглил, я узнал, что указание порядка оценки приведет к менее -оптимальному генерированию кода. Но как же так? Почему определенный порядок оценки аргументов приводит к суб-оптимальному коду? И когда я упомянул порядок оценки аргументов Java. Я нашел следующее в спецификации.

15.7.4. Argument Lists are Evaluated Left-to-Right

In a method or constructor invocation or class instance creation expression, argument expressions may appear within the parentheses, separated by commas. Each argument expression appears to be fully evaluated before any part of any argument expression to its right. If evaluation of an argument expression completes abruptly, no part of any argument expression to its right appears to have been evaluated?

В таком случае Java имеет определенный порядок оценки аргументов, но говорить, что компиляторы C или C++ будут давать менее -оптимальный код, если такое поведение указано, кажется немного странным. Можете ли вы пролить свет на это?

5
задан Bo Persson 12 July 2012 в 11:02
поделиться