哪个更受欢迎:C ++中的foo(void)或foo()

时间:2009-06-20 10:02:02

标签: c++ void

我在C ++中看到了两种定义转换运算符重载的样式,

  1. operator int* (void) const
  2. operator int*() const
  3. 问题1.我认为两种风格(无论是否添加void)具有相同的功能,正确吗?
    问题2.任何偏好哪个更好?

5 个答案:

答案 0 :(得分:10)

这不仅适用于转换运算符,而且适用于不带参数的C ++中的所有函数。就个人而言,我更倾向于省略void以保持一致性。

实践起源于C.最初,当C没有原型时,在函数声明中使用了一对空括号,并且没有提供有关函数所期望的参数的任何信息。

当添加原型时,保留空括号以进行功能声明,以表示“未指定的参数”,以实现灵活性和向后兼容性。为了提供一个显式原型,意思是“不带参数”,添加了语法(void)

在C ++中,所有函数声明都必须有原型,因此()(void)具有相同的含义。

答案 1 :(得分:8)

引自ISO C ++ FAQ,Should I use f(void) or f()?

  

C程序员在声明不带参数的函数时经常使用f(void),但在C ++中被认为是坏的样式。事实上,f(void)风格被C ++的创造者Bjarne Stroustrup,C的共同创造者Dennis Ritchie和Unix诞生的研究部门负责人Doug McIlroy称为“憎恶”。

     

如果您正在编写C ++代码,则应使用f()f(void)样式在C ++中是合法的,但只是为了更容易编译C代码。

呼吁权威FTW:)

答案 2 :(得分:4)

在C ++中,foo()和foo(void)是相同的 - “没有参数”。在C99标准中,前者表示“未定义的参数数量”,而后者表示“无参数”。

但是,如果您依赖C中的foo()行为,则应该拍摄。

所以这意味着您可以使用其中之一。现在个人而言,我比foo(void)更喜欢foo(),因为我讨厌视觉混乱,但这只是偏好。我是一个Python人:)

答案 3 :(得分:0)

我相信'较旧'的C(不知道什么版本)foo()意味着'任何参数',而foo(void)意味着没有参数。 foo()'任何参数'版本已被弃用我相信c99。

快速谷歌搜索发现this wikipedia文章提到了类似的事实。

C ++将接受foo(void),但它与foo()相同,这意味着“没有参数”。

所以在C ++中,首选方法是使用foo()

答案 4 :(得分:-1)

省略虚空。在旧式C中,假设所有函数都是int name(...)。指定void意味着它不是可变长度参数。删除了该默认值并且必须指定所有功能(幸运的是。当任何东西都可以是任何东西时,它是狂野的西部)。在C ++中,你不需要写(void)。省略它。就像C ++库一样。