2017-10-09 441 views
1

我知道new int()new int(10)之间的区别。在第一种情况下分配0,在第二种情况下分配给新创建的int。但是什么是new int {}。我们使用{}进行数组初始化,如new a[]{4,5,6}。但是对于单变量初始化时使用大括号是什么意思?C++中新int()和新int {}之间的区别

/* Combined usage and initialized to 0*/ 
    int *ptr2 = new int(); 
    cout<<"*ptr2 = "<<*ptr2<<endl; 

    /* Allocated memory can be initialized to specific value */ 
    int*ptr3 = new int(5); 
    cout<<"*ptr3 = "<<*ptr3<<endl; 

    int* ptr5 = new int{500}; 
    cout<<"*ptr5 = "<<*ptr5<<endl; 
+4

的可能的复制[具有或不具有初始化差花括号在C++ 11](https://stackoverflow.com/questions/21150067/initialization-difference-with-or-without -curly-braces-in-c11) – Tas

+0

或者https://stackoverflow.com/questions/18222926/why-is-list-initialization-using-curly-braces-better-than-the-alternatives – Tas

回答

3

你的输出是这样的:

*ptr2 = 0 

*ptr3 = 5 

*ptr5 = 500 

在你的情况没有什么区别。

但在一般情况:

(expression-list)  (1)  
= expression   (2)  
{ initializer-list } (3) 

1)任意表达式和支撑-INIT-列表 括号

2)的equals逗号分隔的列表注册后跟表达式

3)braced-init-list:可能为空,逗号分隔的列表 表达式和其他支撑初始列表

参考:http://en.cppreference.com/w/cpp/language/initialization

0

int的特定情况下(或任何一体型例如long)有new int(10)new int{10}之间没有差别。

查看更多about variable initialization

相关问题