4

我见过两种在 C++ 中定义转换运算符重载的方式,

  1. operator int* (void) const
  2. operator int*() const

问题1.我认为这两种样式(无论是否添加void)具有相同的功能,对吗?
问题 2. 有更好的偏好吗?

4

5 回答 5

10

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

这种做法起源于 C。最初,当 C 没有原型时,在函数声明中使用了一对空大括号,并且没有提供有关函数预期参数的任何信息。

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

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

于 2009-06-20T10:09:23.627 回答
8

引用 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 :)

于 2010-01-06T02:29:57.630 回答
4

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

但是,如果您依赖 C 中的 foo() 行为,您应该会被击中。

所以这意味着你可以使用任何一个。现在就个人而言,我更喜欢 foo() 而不是 foo(void),因为我讨厌视觉上的混乱,但这只是偏好。我是一个 Python 人 :)

于 2009-06-20T10:10:01.113 回答
0

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

快速谷歌搜索发现这篇维基百科文章提到了类似的事实。

C++ 将接受,但它的含义与“无参数”的foo(void)含义相同。foo()

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

于 2010-01-06T02:40:20.377 回答
-1

省略空白。在旧式 C 中,所有函数都假定为int name(...). 指定 void 意味着它不是可变长度参数。该默认值已被删除,并且必须指定所有功能(谢天谢地。这是狂野的西部,什么都可以是任何东西)。在 C++ 中,您永远不需要编写 (void)。省略它。就像 C++ 库一样。

于 2010-01-06T02:35:50.720 回答