gpt4 book ai didi

C++ 可变函数语法

转载 作者:行者123 更新时间:2023-11-30 02:14:43 26 4
gpt4 key购买 nike

在 C++03 标准中,[dcl.fct] p.2 指出:

The parameter-declaration-clause determines the arguments that can be specified, and their processing, when the func- tion is called. [ Note: the parameter-declaration-clause is used to convert the arguments specified on the function call; see5.2.2. —endnote]Iftheparameter-declaration-clauseisempty,thefunctiontakesnoarguments.Theparameter list (void) is equivalent to the empty parameter list. Except for this special case, void shall not be a parameter type (though types derived from void, such as void*, can). If the parameter-declaration-clause terminates with an ellipsis, the number of arguments shall be equal to or greater than the number of parameters that do not have a default argument. Where syntactically correct, “, ...” is synonymous with “...”.

parameter-declaration-clause 的语法允许它以 ..., ... 结尾。我找到了 this question答案说最初语法只允许 ...,引入逗号变体 (, ...) 是为了与 C 兼容。

我的问题是为什么引用的段落说“语法正确的地方”?考虑到 function parameter packspack expansions 在 C++03 中不存在,是否存在任何情况下考虑 .. ., ... 同义?

谢谢。

最佳答案

据我了解,这仅表示当您使用 ,... 时使用正确的语法,则可以将其替换为 ...例如:

  • int printf(const char*, ...);是正确的语法,可以用 int printf(const char*...); 代替

  • int printf(,...);语法不正确,不等同于 int printf(...);

您只需添加以下原型(prototype)即可轻松尝试 C 代码:

  • void printf(...); --> 有效
  • void printf(,...); --> ‘,’标记前的预期主表达式

关于C++ 可变函数语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57286379/

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