关于c ++:大括号对于空构造函数是否重要?


Does curly brackets matter for empty constructor?

本问题已经有最佳答案,请猛点这里访问。

我想知道下面的构造函数对于C++是相同的吗?

1
2
3
4
5
6
class foo
{
public:
   foo(void){};
...
}

1
2
3
4
5
6
class foo
{
public:
   foo(void);
...
}

花括号对这两种情况重要吗?多谢!


是的。第二个将生成undefined reference to foo::foo(除非在其他地方定义)。如果你可以使用C++ 11或以上,你可以使用

1
foo()=default;

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


它们不一样。{}表示一个规则的函数体,并给出了前一个函数的定义。

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


这些括号声明一个空的内联构造函数。在这种情况下,有了它们,构造函数就存在了,它只不过做了构造函数不可能隐式做的事情。

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


对。没有它只是一个声明。两者都是声明和定义。尝试使用它-如果没有定义,将出现链接器错误