花括号对于空构造函数是否重要?

时间:2016-05-21 06:32:52

标签: c++

我想知道以下构造函数对于C ++是否相同:

class foo
{ 
public:
   foo(void){};
...
}

class foo
{
public:
   foo(void);
...
}

这两种情况的花括号是否重要?非常感谢!

4 个答案:

答案 0 :(得分:6)

他们不一样。 {}代表一个常规的函数体,并使前function definition

foo(void){}; // function definition
foo(void);   // function declaration

答案 1 :(得分:6)

是的,他们这样做。第二个将生成undefined reference to foo::foo(除非在另一个地方定义)。如果您可以使用C ++ 11或更高版本,则可以使用

foo()=default;

定义编译器生成的构造函数

答案 2 :(得分:3)

这些括号声明一个空的内联构造函数。在这种情况下,使用它们,构造函数确实存在,它只是构造函数不会隐式执行。

在第二种情况下,如果没有它们,编译器将期望在其他地方实现 - 例如.cpp文件。

答案 3 :(得分:2)

是。没有它只是一个声明。这两者都是宣言和定义。尝试使用它 - 如果没有定义

,您将收到链接器错误