首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ std::array 聚合初始化:C++11/14 標準規定與編譯器支援現況

     編輯:程式設計疑難解答

問題背景

《C++ Primer》第五版 302 頁提到 `std::array` 不支援 `c = {a, b, c...}` 形式賦值,但 MSVC 2015 和 g++ 均能編譯通過,是否為標準行為?

標準答案

這是 C++11/14 標準明確支援的聚合初始化/列表初始化語法。

  • C++11 引入 std::initializer_list 與列表初始化 `{}`,`std::array` 作為聚合型別(無使用者宣告建構函式、無私有/受保護非靜態資料成員、無基類、無虛函式),天然支援聚合初始化。
  • C++14 進一步放寬了聚合型別定義(允許預設成員初始化),`std::array` 仍符合。

程式碼示範

#include <array>
#include <iostream>

int main() {
    std::array a = {1, 2, 3};          // 直接列表初始化 (C++11)
    std::array b; 
    b = {4, 5, 6};                               // 列表指派 (C++11)
    std::array c = {7, 8};               // 部分初始化,剩餘值為 0
    for (auto v : c) std::cout << v << ' ';      // 輸出 7 8 0
}

編譯器支援現況

編譯器最低版本標準旗標
GCC4.8-std=c++11
Clang3.3-std=c++11
MSVC2013 (部分), 2015 完整/std:c++14

結語

書本描述可能基於 C++03 視角或舊版標準草案。現代 C++ (C++11 起) 完全支援 `std::array` 的列表初始化與指派,放心使用即可。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved