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

Does curly brackets matter for empty constructor?

本文关键字:是否 构造函数 于空      更新时间:2023-10-16

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

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

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

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

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

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

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

foo()=default;

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

这些括号声明一个空的内联构造函数。在这种情况下,对于它们,构造函数确实存在,它只是只做构造函数不会隐式做的更多。

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

是的。没有它只是一个宣言。两者都是声明和定义。尝试使用它 - 如果没有定义,您将收到链接器错误

相关文章: