给出以下代码:
#pragma once
class B
{
public:
B(void)
{
}
~B(void)
{
}
};
我知道我也可以这样写:
#pragma once
class B
{
public:
B()
{
}
~B()
{
}
};
第一个例子中有void
的目的是什么?是否某种类型的练习声明构造函数采用零参数?
答案 0 :(得分:36)
两者是相同的,至少在C ++中是这样。在C中,提供一对空括号通常表示未指定的参数列表(与空参数列表相对)。 C ++没有这个问题。
如何正确回答这么多次?另一个SO漏洞?
答案 1 :(得分:8)
很久以前你在C中做过这样的事情(我的ISO-C生锈了:)):
void foo(a, b)
int a,
int b
{
}
在创建C ++时,名称mangling需要参数的类型,因此对于C ++,它被更改为:
void foo(int a, int b)
{
}
并将此更改提交给C.
此时,我相信要避免破坏现有的C代码:
void foo()
和此:
void foo(void)
意味着两个非常不同的东西,()
表示不检查参数编号或类型,(void)
表示不带参数。对于C ++ ()
意味着不检查任何内容不起作用,因此()
和(void)
在C ++中的意思相同。
因此,对于C ++ ()
和(void)
总是一样的。
至少这是我记得的方式......: - )
答案 2 :(得分:0)
afaik如果你将void传递给构造函数或任何函数作为参数,则意味着函数dosnt接受任何参数,因此示例a和b相等。但我不确定他们是否有任何改变功能签名或使其运行得更快等等。
答案 3 :(得分:0)
我只是想在函数()之类的参数之后使用void时添加:void它用于表示函数没有返回值。