出於好奇,我看了一下std :: array的LLVM實現,並注意到它是一個結構體。我看過的大多數其他STL容器(矢量,隊列,地圖)都是類。它作爲一個結構出現在標準中,所以是故意的。爲什麼C++ 11 std :: array結構而不是類?
任何人都知道這可能是爲什麼?
出於好奇,我看了一下std :: array的LLVM實現,並注意到它是一個結構體。我看過的大多數其他STL容器(矢量,隊列,地圖)都是類。它作爲一個結構出現在標準中,所以是故意的。爲什麼C++ 11 std :: array結構而不是類?
任何人都知道這可能是爲什麼?
從技術上講,它既不是結構也不是類 - 它是一個模板。
std::array
必須是aggregate
。長話短說,這最終意味着它不能擁有任何私人的東西 - 所以它可能被寫爲struct
(默認爲公開),而不是class
(默認爲使所有內容私人的)。
如果你想你可以寫爲class
反正:
template <...>
class array {
public:
// ...
但你需要讓一切公開,所以你還不如用一個struct
在默認情況下做到這一點。
std::array
是POD類型,以便它可以像這樣進行初始化:
std::array<int, 5> arr = { 1, 2, 3, 4, 5 };
這是從在一個initializer_list
初始化不同陣列實際上並不對陣列元件和移動分配新的空間來自初始化器列表的數據在那裏,但括號中的數據(最終在初始化的數據段中)是數組的內部表示。
這意味着沒有複製或移動,實際上沒有代碼正在運行來初始化任何東西。只要將可執行文件加載到內存中,陣列就準備就緒。
它似乎是一個常用的POD類型結構的慣例,但我不知道這是否是原因。 –
聚合可能沒有私人或受保護的成員,並且'std :: array'必須是聚合。 – dyp