我见过两种在 C++ 中定义转换运算符重载的方式,
operator int* (void) const
operator int*() const
问题1.我认为这两种样式(无论是否添加void
)具有相同的功能,对吗?
问题 2. 有更好的偏好吗?
这不仅适用于转换运算符,还适用于 C++ 中不带参数的所有函数。就个人而言,我更喜欢省略void
一致性。
这种做法起源于 C。最初,当 C 没有原型时,在函数声明中使用了一对空大括号,并且没有提供有关函数预期参数的任何信息。
添加原型时,为函数声明保留了空括号,以表示“未指定的参数”,以实现灵活性和向后兼容性。为了提供一个明确的原型,意思是“不带参数”,(void)
添加了语法。
在 C++ 中,所有函数声明都必须有原型,因此()
和(void)
具有相同的含义。
引用 ISO C++ FAQ,我应该使用f(void)
orf()
吗?
f(void)
C 程序员在声明不带参数的函数时经常使用,但是在 C++ 中,这被认为是不好的风格。事实上,这种f(void)
风格被 C++ 的创造者 Bjarne Stroustrup、C 的共同创造者 Dennis Ritchie 和 Unix 诞生的研究部门负责人 Doug McIlroy 称为“可憎”。如果您正在编写 C++ 代码,则应使用
f()
. 这种f(void)
风格在 C++ 中是合法的,但只是为了更容易编译 C 代码。
向当局上诉 FTW :)
在 C++ 中 foo() 和 foo(void) 是相同的——“无参数”。在 C99 标准中,前者的意思是“未定义的参数个数”,而后者的意思是“没有参数”。
但是,如果您依赖 C 中的 foo() 行为,您应该会被击中。
所以这意味着你可以使用任何一个。现在就个人而言,我更喜欢 foo() 而不是 foo(void),因为我讨厌视觉上的混乱,但这只是偏好。我是一个 Python 人 :)
我相信'旧'C(不知道什么版本)foo()
意味着'任何参数'而foo(void)
意味着没有参数。foo()
“任何参数”版本已被弃用,我相信 c99。
快速谷歌搜索发现这篇维基百科文章提到了类似的事实。
C++ 将接受,但它的含义与“无参数”的foo(void)
含义相同。foo()
所以在 C++ 中,首选的方法是使用foo()
.
省略空白。在旧式 C 中,所有函数都假定为int name(...)
. 指定 void 意味着它不是可变长度参数。该默认值已被删除,并且必须指定所有功能(谢天谢地。这是狂野的西部,什么都可以是任何东西)。在 C++ 中,您永远不需要编写 (void)。省略它。就像 C++ 库一样。