C+函数参数的求值顺序

C+函数参数的求值顺序

如果我们有三个函数(foo、bar和baz)是这样组成的.

foo(bar(), baz())

C+标准是否保证在Baz之前对BAR进行评估?


www说
浏览 651回答 3
3回答

拉丁的传说

不,没有这样的保证。根据C+标准,它是未定义的。Bjarne Stroustrup还在第3版第6.2.2节“C+编程语言”中明确表示,有一些理由:在不限制表达式计算顺序的情况下,可以生成更好的代码。虽然从技术上讲,这指的是同一节的前一部分,即表达式的各部分的计算顺序也是未定义的,即int x = f(2) + g(3);   // undefined whether f() or g() is called first

慕莱坞森

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

叮当猫咪

从[5.2.2]函数调用,参数的计算顺序未指定。参数表达式计算的所有副作用在输入函数之前生效。因此,不能保证bar()在此之前baz(),只是那个bar()和baz()会被叫来foo.[5]还请注意:除非已注明(例如特别规则)&&和||],未具体说明单个运算符操作数的计算顺序和单个表达式的子表达式以及副作用发生的顺序。所以即使你是在问bar()在此之前baz()在……里面foo(bar() + baz()),该命令仍未具体说明。
打开App,查看更多内容
随时随地看视频慕课网APP