提问人:Luchian Grigore 提问时间:9/14/2011 更新时间:11/12/2021 访问量:11885
为什么要在方法参数列表中添加 void
Why add void to method parameter list
答:
3赞
Gilad Naor
9/14/2011
#1
这是旧版本的 C 的遗留问题,适用于没有参数的函数。
17赞
Jon
9/14/2011
#2
C++ 标准说(强调我的):
8.3.5.2
parameter-declaration-clause 确定可以 指定,以及调用函数时的处理。[注: parameter-declaration-clause 用于转换参数 在函数调用中指定;参见 5.2.2。] 如果 parameter-declaration-clause 为空,则函数不取 参数。
这意味着,如果你正在与编译器交谈,这只是一个品味问题。
如果您正在编写将被其他人阅读的代码,那么 C++ 的做事方式是
void foo();
另一种形式仅出于与C相容的原因而仍然有效,因为C之间有两个签名之间存在差异。
评论
0赞
Jon
9/14/2011
@DavidHeffernan:“这是一个品味问题”不是含蓄地回答了吗?请注意,我只考虑了“新鲜”的 C++ 代码,而不是过去曾经是 C 但被移植的代码,在这种情况下,“因为没有人费心将其更改为现代方式”可能是一个答案。
1赞
Jon
9/14/2011
@DavidHeffernan:我能看到它的价值,所以我做了一个编辑。感谢您的输入。
54赞
Raymond Chen
9/14/2011
#3
这是旧版本C的延续,其中的意思是“参数数量未知的函数”,意思是“参数为零的函数”。在 C++ 中,两者都表示“零参数的函数”,但有些人更喜欢第二种形式,因为它更明确。foo()
foo(void)
foo()
foo(void)
评论
7赞
Keith Thompson
9/14/2011
这不仅仅是旧版本的 C。从 1989 年 ANSI 标准开始的所有 C 版本中,意味着 foo 没有参数a,并且意味着 foo 具有固定但未指定的参数数量和类型。C++ 接受相同的语法以兼容 C。void foo(void);
voi foo();
20赞
James Kanze
9/14/2011
更准确地说:在C语言的“较旧”(读作“非常旧”)版本中,是声明函数的唯一方法,并且没有验证参数的数量或类型。当 C 采用 C++ 的函数原型时,存在向后兼容性问题(因为在 C++ 中,这意味着没有参数,因为它没有说明 C 中的参数)。C标准委员会发明了作为解决方法,C++委员会出于C兼容性的原因采用了它。foo()
f()
f(void)
0赞
Keith Thompson
9/14/2011
@James:我想你的意思是C标准委员会发明了它。
0赞
James Kanze
9/14/2011
@Keith当然。感谢您指出它;我将编辑我的评论以纠正此问题。(除了我不能。这似乎是我唯一可以编辑的评论。
1赞
Raymond Chen
6/3/2013
@gsingh2011 您必须在定义中声明参数。旧版本的 C 不允许在正向声明中声明参数。有关更多详细信息,请阅读 C 标准。
3赞
David Heffernan
9/14/2011
#4
在 C++ 代码中,没有任何理由以这种方式使用 void。更重要的是,它在很大程度上不是声明无参数函数的惯用方法。
评论
0赞
Justin Time - Reinstate Monica
1/13/2017
我相信,如果一个文件被设计成可以编译为 C 或 C++,它会很有用。...我想不出任何理由,如果这不是本意,我想不出任何理由。
下一个:如何有效地为 8 球比赛打台球?
评论
CClassname(void)
~CClassname(void)