以下语句的执行顺序是什么:
x = f(2) * g(5) + h();
我看过this的链接,应该是f,g,h,对不对,请解释一下
uyto3xhc1#
在这种情况下,您无法保证函数的执行顺序。虽然优先级规则意味着f(2)将在h()加到结果之前乘以g(5),但是这些子表达式的执行顺序是由实现定义的。如果您对有副作用的函数执行此操作,请不要这样做。根据代码的不同,您可能会看到不同编译器的不同结果。
f(2)
h()
g(5)
**注意:**正如@Jakub Zaverka提到的,在处理逻辑运算符&&或||时,由于短路等特性,规则略有不同。
&&
||
sbtkgmzw2#
使用x = f(2) * g(5) + h();f(2)、g(5)和h()以 * 任何 * 顺序执行-如果处理器支持,甚至可能同时执行。将f()和g()的结果相乘,然后将乘积与h()的结果相加。
f()
g()
2条答案
按热度按时间uyto3xhc1#
在这种情况下,您无法保证函数的执行顺序。
虽然优先级规则意味着
f(2)
将在h()
加到结果之前乘以g(5)
,但是这些子表达式的执行顺序是由实现定义的。如果您对有副作用的函数执行此操作,请不要这样做。根据代码的不同,您可能会看到不同编译器的不同结果。
**注意:**正如@Jakub Zaverka提到的,在处理逻辑运算符
&&
或||
时,由于短路等特性,规则略有不同。sbtkgmzw2#
使用
x = f(2) * g(5) + h();
f(2)
、g(5)
和h()
以 * 任何 * 顺序执行-如果处理器支持,甚至可能同时执行。将
f()
和g()
的结果相乘,然后将乘积与h()
的结果相加。