2012-08-16 103 views
1

爲什麼它不可能建立在以下方式對對象:在C++ 03創建對對象C++

pair<int,int> p1 = {0,42} 
+1

你爲什麼認爲這是不可能的? – sbi 2012-08-16 09:37:54

+0

如果您在Linux下編譯,請嘗試使用-std = C++ 11進行鏈接。如果你已經包含了分號等,它應該可以正常工作。 – Owl 2016-03-29 16:15:58

回答

5

你應該使用

std::make_pair(0, 42); 

因爲對不是簡單的數據 - 結構體。 或由一對即

std::pair<int, int> p1(0, 42); 

的調用構造在C++ 11

pair<int, int> p1 = {0, 42}

是好的。

4

C++ 03中不允許初始化程序列表語法,因爲std::pair不是集合,因此初始化的有效方式是構造函數調用。

從C++標準(C++ 03 8.5.1§1)

形式定義:

聚集是沒有用戶聲明的 構造的陣列或一個類(第9節)(12.1) ,沒有私有或受保護的非靜態數據成員 (第11章),沒有基類(第10節),也沒有虛擬函數 (10.3)。

請詳細閱讀FAQ

通過引入std::initializer_list改變了C++ 11中的事物。