为什么 C++ 中逗号是可选的可变参数函数声明?

发布于 2024-12-18 08:19:57 字数 157 浏览 1 评论 0原文

这两个声明有区别吗?

int foo( int a, ... );

那么使第二个在语法上有效的意义何在?

int foo( int a ... );

如果没有区别,

Is there a difference in these two declarations?

int foo( int a, ... );

and

int foo( int a ... );

If there is no difference, what was the point of making the second syntactically valid?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

留蓝 2024-12-25 08:19:57

这是推测,但在 C++ 中,拥有一个没有其他参数的函数是有意义的,例如 void f(...) 而在 C 中,这样的函数没有用(据我所知) ) 所以 ... 必须遵循一些其他参数,因此需要一个逗号。

从语法的角度来看,简单地允许 void f( int a ... ) 并赋予它明显的含义比禁止它更简单,并且不会造成太大的负担关于编译器编写者或程序员的任何困惑。

(我最初认为这可能与使参数包的语法更加规则有关,但我发现无论如何,它在 C++03 中是明确允许的。)

This is speculation, but in C++ in can make sense to have a function with no other parameters, e.g. void f(...) whereas in C a function like this has no use (that I know of) so ... must follow some other parameter and hence, a comma.

From a grammar point of view, it's simpler to simply allow void f( int a ... ) and give it the obvious meaning than it is to disallow it and it's not going to cause much of a burden on compiler writers or any confusion for programmers.

(I originally thought it might be something to do with making the grammar for parameter packs more regular but I discovered that it was explicitly allowed in C++03 in any case.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文