`f(void)`表示C++ 11或C中没有参数?

And*_*zos 24 c c++ c++11

在C++ 11中,以下函数声明:

int f(void);
Run Code Online (Sandbox Code Playgroud)

意思是:

int f();
Run Code Online (Sandbox Code Playgroud)

由非依赖类型void的单个未命名参数组成的参数列表等效于空参数列表.

我得到(也许是错误的)印象这是一个旧功能,也许是从C继承而来的?

有没有人知道这种方式背后的历史或理由来声明一个没有参数的函数?

Mat*_*son 22

在C++中,它们都意味着相同的东西.

在C中f(void)是不同的f(),因为这f()意味着"未指定的参数" - 你可以合法地传递任何东西(接收数据的功能是否高兴是另一回事).

  • @ddriver实际上是允许与非常旧的c语法兼容,允许声明像`void func()int a这样的函数; int b; {};`. (4认同)

Pie*_*aud 11

在C++中,两者都是一样的.

在C中,f()意味着我们不知道此时函数需要多少参数.这是未指定的参数.并且f(void)意味着此功能不带任何参数.

从C标准:

6.7.6.3函数声明符(包括原型)

6 /参数类型列表指定函数参数的类型,并可以声明其标识符.

10 /类型的未命名参数void作为列表中唯一项的特殊情况指定该函数没有参数.

14 /标识符列表仅声明函数参数的标识符.函数声明符中的空列表是该函数定义的一部分,指定该函数没有参数.函数声明符中的空列表不是该函数定义的一部分,它指定不提供有关参数数量或类型的信息.

就像你说的那样,在C++标准中:

8.3.5函数[dcl.fct]

4/parameter-declaration-clause确定调用函数时可以指定的参数及其处理.[ 注意:*参数声明子句*用于转换函数调用中指定的参数; 见5.2.2.- 结束注释 ]如果parameter-declaration-clause为空,则该函数不带参数.由非依赖类型的单个未命名参数组成的参数列表void等同于空参数列表.