C ++ 11:Test * test = new Test之间的区别;和Test * test = new Test();

时间:2014-12-30 01:14:24

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

在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 stadard下是否存在差异。

该问题的接受答案是:

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

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

1 个答案:

答案 0 :(得分: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的初始化规则进行解释,以进行直接初始化。