为什么将void添加到方法参数列表中

Luc*_*ore 31 c++

我见过带有以下签名的方法:

void foo (void);
Run Code Online (Sandbox Code Playgroud)

他们没有争论,但我想知道这样做是否有用.你有没有理由想要这样做?

Ray*_*hen 52

这是旧版C的延续,foo()意思是"具有未知数量参数foo(void)的函数",意思是"具有零参数的函数".在C++中,foo()foo(void)意思都是"零个参数的函数",但有些人更喜欢第二种形式,因为它是更加明确.

  • 更准确地说:在C语言的"旧"(读"非常旧")版本中,`foo()`是声明函数的唯一方法,并且没有验证参数的数量或类型.当C采用C++的函数原型时,与`f()`存在向后兼容性问题(因为在C++中,它意味着没有参数,因为它没有说明C中的参数).C标准委员会发明了`f(void)`作为解决方法,C++委员会因C兼容性而采用了它. (20认同)
  • 它不仅仅是旧版本的C.在所有版本的C中,从1989 ANSI标准开始,`void foo(void);`表示foo没有参数,而`voi foo();`表示foo有固定的但是未指定的参数数量和类型.C++接受与C兼容的相同语法. (7认同)

Jon*_*Jon 16

C++ 03标准说(强调我的):

8.3.5.2

parameter-declaration-clause确定调用函数时可以指定的参数及其处理.[注意:parameter-declaration-clause用于转换函数调用中指定的参数; 见5.2.2.] 如果参数声明子句是空的,函数没有参数.

这意味着如果你正在与编译器交谈,那只是一个品味问题.

如果您正在编写将由其他人阅读的代码,那么C++的处理方式就是

void foo();
Run Code Online (Sandbox Code Playgroud)

另一种形式只是为了与C,那里有兼容性的原因仍然有效两个签名之间的差异.