看一下我的一些旧代码,我发现出于笨拙,我定义了一个像这样的析构函数:
~ResourceManager(void);
这不仅可以编译,而且可以按预期工作。我当然把它改为
~ResourceManager();
但是我太快了重构?第一个版本是正确的还是好的C ++风格?
由于问题已经结束,并且没有任何机会进行适当的消除歧义,我应该从标准的中提出相关的引用来解决这个问题,当解析器被置于透视中时
12.4 析构函数
- 使用可选函数说明符(7.1.2)后跟〜后跟析构函数的类名后跟空参数列表的特殊声明符语法用于在类定义中声明析构函数。在这样的声明中,〜后跟析构函数的类名可以包含在可选的括号中;这样的括号被忽略了。在析构函数声明的声明符中,不能将typedef-name用作类后面的类名。
醇>
所以标准规定了一个空参数列表。也许向后兼容自由函数的C实践(其中f(void)
是声明空参数列表的方式)在实现中将析构函数与它们一起使用,但当然不会似乎是有效的C ++ 。
答案 0 :(得分:7)
这是来自C的残余。在C中,空参数列表并不意味着不带参数的函数,而是具有未指定数量的参数的函数。在C ++中,不推荐使用foo(void)
,并且首选foo()
,因为它特别指的是不带参数的函数。你的析构函数也是如此。虽然这两行代码是等效的,但您应该更喜欢~ResourceManager()
版本。
答案 1 :(得分:2)
这两行代码之间没有区别。 ()
与(void)
相同。从风格的角度来看,()
是我一直看到的没有参数的函数。
答案 2 :(得分:2)
两条线都是等价的。一些开发人员喜欢在无参数函数签名中明确(void)
对任何阅读它的人说“它不需要任何参数”