1

考虑这段代码:

int func1()
{
    cout<<"Plus"<<endl;
    return 1;
}
int func2()
{
   cout<<"Multiplication"<<endl;
   return 2;
}
int main()
{
  cout<<func1()+4*func2();
}

根据此页面* 运算符的优先级高于 + 运算符所以我希望结果是:

Multiplication 
Plus
9

但结果是

Plus 
Multipication
9

!!编译器解析器发生了什么?!编译器是否更喜欢运算符关联?所有 c/c++ 编译器的输出是否相同?

4

2 回答 2

27

运算符优先级与评估顺序不同。

您无法保证评估的顺序 - 只要您获得正确的结果,编译器就可以在表达式中按照它喜欢的任何顺序自由调用函数。

(一个次要条件:任何引入序列点(包括短路运算符)的东西都会对评估顺序产生影响,但在这种特殊情况下,表达式中没有序列点。)

于 2013-08-21T16:21:47.263 回答
8

编译器可以自由地以它喜欢的任何顺序评估函数——表达式中唯一保证评估顺序的情况是序列点;三元条件运算符的运算符||&&,和是序列点。在每种情况下,左侧都会在触摸右侧之前评估其所有值和副作用。?? :

于 2013-08-21T16:24:51.560 回答