我在C++中看到了两种定义转换运算符重载的样式,
operator int* (void) const
operator int*() const
问题1.我认为两种风格(无论是否添加void
)都具有相同的功能,对吗?
问题2.任何偏好哪个更好?
这不仅适用于转换运算符,而且适用于不带参数的C++中的所有函数.就个人而言,我更喜欢省略void
一致性.
实践起源于C.最初,当C没有原型时,在函数声明中使用了一对空括号,并且没有提供有关函数所期望的参数的任何信息.
添加原型时,保留空括号以进行功能声明,以表示"未指定的参数",以实现灵活性和向后兼容性.为了提供一个显式原型,意思是"不带参数",(void)
添加了语法.
在C++中所有函数声明必须有原型,所以()
和(void)
具有相同的含义.
引用ISO C++常见问题解答,我应该使用f(void)
或f()
?
C语言程序员经常
f(void)
在声明不带参数的函数时使用,但在C++中被认为是不好的样式.事实上,这种f(void)
风格被C++的创造者Bjarne Stroustrup,C的共同创造者Dennis Ritchie和Unix诞生的研究部门负责人Doug McIlroy称为"憎恶".如果你正在编写C++代码,你应该使用
f()
.该f(void)
样式在C++中是合法的,但只是为了更容易编译C代码.
呼吁权威FTW :)