在使用 new (c++) 调用构造函数时不使用括号

发布于 2024-10-20 06:58:41 字数 426 浏览 4 评论 0原文

可能的重复:
在类型名称后面添加括号与 new 有区别吗?

所以我的主要内容是:

Class* pC = new Class;

它正在工作,因为

Class* pC = new Class();

我今天才意识到我省略了括号(所以我在某种程度上受到了最令人烦恼的解析的“相反”的打击)。

我的问题:这两种形式等效吗?

Possible Duplicate:
Do the parentheses after the type name make a difference with new?

So I had in my main:

Class* pC = new Class;

It was working as

Class* pC = new Class();

I realized just today that I had omitted the parentheses (so I was hit by the "opposite" of the most vexing parse in a way).

My question: Are these two forms equivalent ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

影子的影子 2024-10-27 06:58:41

如果类定义了默认构造函数,则两者是等效的;该对象将通过调用该构造函数来创建。

如果类只有一个隐式默认构造函数,那么就有区别。第一个将使 POD 类型的任何成员处于未初始化状态;第二个将对它们进行值初始化(即将它们设置为零)。

If the class has a default constructor defined, then both are equivalent; the object will be created by calling that constructor.

If the class only has an implicit default constructor, then there is a difference. The first will leave any members of POD type uninitialised; the second will value-initialise them (i.e. set them to zero).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文