我在C ++中看到了两种定义转换运算符重载的样式,
operator int* (void) const
operator int*() const
问题1.我认为两种风格(无论是否添加void
)具有相同的功能,正确吗?
问题2.任何偏好哪个更好?
答案 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 ++库一样。