花括号对空构造函数是不是重要? [复制]

Posted

技术标签:

【中文标题】花括号对空构造函数是不是重要? [复制]【英文标题】:Does curly brackets matter for empty constructor? [duplicate]花括号对空构造函数是否重要? [复制] 【发布时间】:2016-09-18 11:40:01 【问题描述】:

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

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

class foo

public:
   foo(void);
...

大括号对这两种情况重要吗?非常感谢!

【问题讨论】:

【参考方案1】:

他们不一样。 代表一个常规的函数体,使前者成为function definition。

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

【讨论】:

感谢您的链接!【参考方案2】:

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

foo()=default;

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

【讨论】:

感谢=default 的建议! 请注意foo()=default;foo() 并不完全相同。第一个是“微不足道”的构造函数,第二个不是。用户定义的构造函数即使是空的也绝不是微不足道的。【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于花括号对空构造函数是不是重要? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

访问控制对已删除的构造函数是不是重要?

Dart:这些方括号在构造函数中的作用是啥? [复制]

我可以用花括号构造一个链表吗?

Kotlin 类与继承

C++:调用无参数的构造函数为啥不加括号

显式复制构造函数和统一初始化