gpt4 book ai didi

c++ - 理论上可以在 C++ 函数中将多少参数作为参数传递?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:05:33 25 4
gpt4 key购买 nike

我想知道您可以传递给函数的参数数量是否有限制。

我只是想知道,因为我必须在工作中维护 5 个以上参数的函数。

nbArguments 中是否有临界阈值,谈论性能,还是线性的?

最佳答案

C 和 C++ 标准都没有对调用函数时必须能够传递的参数/参数的数量提出绝对要求,但 C 标准建议实现应至少支持 127 个参数/参数(§5.2 .4.1/1),并且 C++ 标准建议它应该支持至少 256 个参数/参数 (§B/2)。

C 标准的精确措辞是:

The implementation shall be able to translate and execute at least one program that contains at least one instance of every one of the following limits.

因此,必须成功翻译一个这样的函数,但不能保证如果您的代码尝试这样做,编译就会成功(但在现代实现中它可能会成功)。

C++ 标准甚至没有走那么远,只是这么说:

The bracketed number following each quantity is recommended as the minimum for that quantity. However, these quantities are only guidelines and do not determine compliance.

至于什么是可取的:这取决于。一些函数(尤其是那些使用可变参数/可变模板的函数)接受任意数量(或多或少)任意类型的参数。在这种情况下,传递相对较多的参数是有意义的,因为每个参数或多或少独立于其他参数(例如,打印项目列表)。

当参数更……相互依赖时,您不只是按顺序传递列表或其他内容,我同意数量应该受到更多限制。在 C 语言中,我看到有一些可以达到 10 左右,而且还不是非常笨重,但这肯定已经开始突破极限了,即使是最好的情况。在 C++ 中,将相关项聚合到 structclass 中通常很容易(也更常见),我无法想象有那么多参数,除非它在C 兼容层或类似的东西,其中更...结构化的方法可能会迫使用户做更多的工作。

最后,归结为:您要么必须传递较少数量的单独较大的项目,要么将函数调用分解为多个调用,将较少数量的参数传递给每一个。

后者往往会导致有状态的接口(interface),这基本上会以或多或少的固定顺序强制执行多个调用。您已经降低了单个调用的复杂性,但可能很容易对降低代码的整体复杂性采取很少或根本没有采取任何措施。

另一方面,大量的参数可能很好地意味着您已经真正定义了执行大量相关任务的函数,而不是一个明确定义的任务。在这种情况下,为各个函数寻找更具体的任务来执行,并传递每个函数所需的较小参数集可能会降低代码的整体复杂性。

关于c++ - 理论上可以在 C++ 函数中将多少参数作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24646221/

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