2017-10-09 442 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

相關問題