gpt4 book ai didi

c++ - 函数参数求值顺序

转载 作者:IT老高 更新时间:2023-10-28 22:00:12 25 4
gpt4 key购买 nike

在 C 和 C++ 中,对函数的参数求值是否有固定的顺序?我的意思是,标准是怎么说的?是 left-to-right 还是 right-to-left?我从书中得到了令人困惑的信息。

函数调用是否必须使用stack only来实现? C 和 C++ 标准对此有何规定?

最佳答案

C 和 C++ 是两种完全不同的语言;不要假设相同的规则总是适用于两者。但是,在参数评估顺序的情况下:

C99:

6.5.2.2 Function calls
...
10 The order of evaluation of the function designator, the actual arguments, and subexpressions within the actual arguments is unspecified, but there is a sequence point before the actual call.

[编辑]C11(草案):

6.5.2.2 Function calls
...
10 There is a sequence point after the evaluations of the function designator and the actualarguments but before the actual call. Every evaluation in the calling function (includingother function calls) that is not otherwise specifically sequenced before or after theexecution of the body of the called function is indeterminately sequenced with respect tothe execution of the called function. 94)
...
94) In other words, function executions do not ‘‘interleave’’ with each other.

C++:

5.2.2 Function call
...
8 The order of evaluation of arguments is unspecified. All side effects of argument expression evaluations take effect before the function is entered. The order of evaluation of the postfix expression and the argument expression list is unspecified.

这两个标准都没有强制要求使用硬件堆栈来传递函数参数;这是一个实现细节。 C++ 标准使用术语“展开堆栈”来描述在从 try block 到 throw-expression 的路径上为自动创建的对象调用析构函数,但仅此而已。大多数流行的架构确实通过硬件堆栈传递参数,但它不是通用的。

[编辑]

I am getting confusing information from the books.

这一点也不奇怪,因为 90% 的关于 C 的书籍很容易垃圾

虽然语言标准对于学习 C 或 C++ 而言都不是很好的资源,但最好能方便地解决此类问题。官方™ 标准文档需要花费真金白银,但有些草稿可以在线免费获得,对于大多数用途来说应该足够了。

最新的 C99 草案(自原始发布以来有更新)可用 here .最新的预发布 C11 草案(去年正式批准)可用 here . C++ 语言的公开可用草案是可用的 here ,尽管它明确声明某些信息不完整或不正确。

关于c++ - 函数参数求值顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9566187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com