【问题标题】:C++11: Difference between Test* test = new Test; and Test* test = new Test();C++11:Test* test = new Test 之间的区别;和 Test* test = new Test();
【发布时间】:2014-12-30 01:14:23
【问题描述】:

C++11下,如果'Test'是一个普通的类,有什么区别:

Test* test = new Test;
//and
Test* test = new Test();

注意:这是Do the parentheses after the type name make a difference with new?再次问的同一个问题,因为旧线程在C++11之前,而我想问在c++11标准下是否有区别。

该问题的公认答案是:

  • 在 C++1998 中有 2 种类型的初始化:零和默认在
  • C++2003 第三种初始化类型,添加了值初始化。

我了解 C++11 只有 2 个初始化,默认值和值。所以我觉得答案有点不同?

【问题讨论】:

  • 你看过这个吗? >>pods
  • “普通班”是什么意思?有非凡的吗?

标签: c++11 constructor initialization new-operator


【解决方案1】:

C++11 具有零初始化、默认初始化、值初始化(8.5/5/6/7 , 对应), 复制初始化 (8.5/14), 直接初始化 (8.5/15) 和列表初始化 (8.5.4 )。

特别是关于new

5.3.4/15 创建T 类型对象的new-expression 将该对象初始化如下:

——如果 new-initializer 被省略,对象被默认初始化(8.5);如果不执行初始化,则对象具有不确定的值。

——否则,new-initializer按照8.5的初始化规则进行解释,进行直接初始化。

【讨论】:

  • 哦!我不知道 C++11 中有“零初始化”——据我所知,“C++ Primer”似乎只引入了默认值和值初始化。请问什么是“8.5/5”?我在哪里可以查看详细内容?
猜你喜欢
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-06
  • 2011-03-25
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
相关资源
最近更新 更多