为了账号安全,请及时绑定邮箱和手机立即绑定

C+函数参数的求值顺序

C+函数参数的求值顺序

C++ C
www说 2019-06-20 15:37:57
C+函数参数的求值顺序如果我们有三个函数(foo、bar和baz)是这样组成的.foo(bar(), baz())C+标准是否保证在Baz之前对BAR进行评估?
查看完整描述

3 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

不,没有这样的保证。根据C+标准,它是未定义的。

Bjarne Stroustrup还在第3版第6.2.2节“C+编程语言”中明确表示,有一些理由:

在不限制表达式计算顺序的情况下,可以生成更好的代码。

虽然从技术上讲,这指的是同一节的前一部分,即表达式的各部分的计算顺序也是未定义的,即

int x = f(2) + g(3);   // undefined whether f() or g() is called first


查看完整回答
反对 回复 2019-06-20
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

bar()和Baz()没有指定的顺序-标准只说在foo()被调用之前将对它们进行计算。摘自C+标准5.2.2/8节:

参数的计算顺序未指定。


查看完整回答
反对 回复 2019-06-20
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

从[5.2.2]函数调用,

参数的计算顺序未指定。参数表达式计算的所有副作用在输入函数之前生效。

因此,不能保证bar()在此之前baz(),只是那个bar()baz()会被叫来foo.

[5]还请注意:

除非已注明(例如特别规则)&&||],未具体说明单个运算符操作数的计算顺序和单个表达式的子表达式以及副作用发生的顺序。

所以即使你是在问bar()在此之前baz()在……里面foo(bar() + baz()),该命令仍未具体说明。


查看完整回答
反对 回复 2019-06-20
  • 3 回答
  • 0 关注
  • 650 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信