」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼 GCC 無法使用初始化清單初始化 std::array?

為什麼 GCC 無法使用初始化清單初始化 std::array?

發佈於2024-11-19
瀏覽:678

Why Does GCC Fail to Initialize std::array with Initialization Lists?

初始化清單和std::array:GCC Bug

C 標準庫中的std::array 類別提供了一個固定的-大小數組容器。人們普遍認為此類支援初始化列表。

但是,使用GCC 4.6.1,嘗試使用以下語法初始化std::array 實例會失敗:

std::array<:string> strings = { "a", "b" };
std::array<:string> strings({ "a", "b" });

儘管初始化清單與std::vector 一起使用,但std::array 的這種行為已經引發有關C 標準或潛在GCC 問題的問題。

std::array 的內部工作

std::array 本質上是一個封裝陣列的結構體。其結構類似:

template
struct std::array {
  T a[size];
};

與具有接受初始值設定項清單的建構子的 std::vector 不同,std::array 缺少這樣的建構子。

聚合初始化

雖然 std::array 沒有用於初始化列表的明確構造函數,但它在 C 11 中被視為聚合類型。因此,它可以聚合初始化。但是,要初始化結構體中的數組,需要一組附加的大括號:

std::array<:string> strings = {{ "a", "b" }};

潛在的GCC Bug

C 標準允許在此類初始化中省略額外的大括號。因此,如果沒有它們,GCC 無法處理此語法很可能是錯誤。

最新教學 更多>
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-11-19
  • 如何使用正規表示式提取 JavaScript 中標籤之間的多行文字?
    如何使用正規表示式提取 JavaScript 中標籤之間的多行文字?
    用於在JavaScript 中提取兩個標籤之間的多行文字的正規表示式您在使用正規表示式模式從HTML 字串中提取文字時面臨挑戰。具體來說,當 HTML 中存在換行符時,多行標誌 (/m) 似乎不起作用。 要解決此問題,您需要使用“/.../s”修飾符,通常稱為“dotall”修飾符。然而,需要注意的...
    程式設計 發佈於2024-11-19
  • 如何有效率地檢索 Go 字串的最後一個字元?
    如何有效率地檢索 Go 字串的最後一個字元?
    檢索Go 字符串的最後一個字符在Go 中,處理字符串時會出現一個常見的需求:從Go 字符串中檢索最後X 個字元給定的字串。雖然 string 套件沒有為此任務提供特定函數,但有一些有效的方法可以使用切片表達式來完成此任務。 要取得字串的最後 N 個字符,請使用以下切片表達式語法:stringVari...
    程式設計 發佈於2024-11-19
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-11-19
  • 快速使用 Redis Crud 範例
    快速使用 Redis Crud 範例
    安裝依賴和環境變量 將資料庫連線中的值替換為您的值。 #env file REDIS_ADDRESS=localhost REDIS_PORT=6379 REDIS_PASSWORD=123456 REDIS_DB=0 #install on go go get github.c...
    程式設計 發佈於2024-11-19
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-19
  • React.js 簡介:優點和安裝指南
    React.js 簡介:優點和安裝指南
    React.js是什麼? React.js 是一個強大的 JavaScript 函式庫,用於建立互動式和響應式使用者介面 (UI)。 React 由 Facebook 開發,使開發人員能夠以更有效率、更結構化的方式建立 Web 應用程式。在這篇文章中,我們將探討 React.js 的幾個優點,並提...
    程式設計 發佈於2024-11-19
  • 如何透過唯一鍵約束消除MySQL資料庫中的重複記錄?
    如何透過唯一鍵約束消除MySQL資料庫中的重複記錄?
    從MySQL 資料庫中清除重複記錄:獨特的關鍵解決方案從MySQL 資料庫中清除重複記錄:獨特的關鍵解決方案維護資料完整性對於任何資料庫的高效運作至關重要。在本例中,您會遇到一個包含“id”和“title”列的表,其中“title”應該不同。然而,超過 60 萬筆記錄的存在(包括大量重複記錄)對實現...
    程式設計 發佈於2024-11-19
  • 如何在 Go 中實現通道就緒的非同步通信,同時最小化 CPU 使用率?
    如何在 Go 中實現通道就緒的非同步通信,同時最小化 CPU 使用率?
    通道就緒的非同步通訊在 Go 中,通道促進了 goroutine 之間的並發通訊。當處理緩衝發送通道和無緩衝接收通道時,可以同時選擇兩個通道以優化通訊流。本文探討了在最小化 CPU 使用率的同時實現此功能的方法。 要了解此問題,請考慮以下上下文:s := make(chan<- int, 5)...
    程式設計 發佈於2024-11-19
  • 為什麼我找不到「vendor/autoload.php」:解決 Composer 自動載入錯誤的指南
    為什麼我找不到「vendor/autoload.php」:解決 Composer 自動載入錯誤的指南
    解決「require(vendor/autoload.php): 無法開啟流」錯誤問題描述:在PHP腳本開頭遇到以下錯誤:Warning: require(vendor/autoload.php): failed to open stream: No such file or directory F...
    程式設計 發佈於2024-11-19
  • 如何模擬 Python 的請求模組以實現真實的 API 互動?
    如何模擬 Python 的請求模組以實現真實的 API 互動?
    模擬API 互動的模擬Python 請求模組在我們全面測試與API 互動的Python 程式碼的過程中,有效地模擬requests模組至關重要。以下是使用自訂回應模擬requests.get() 呼叫的逐步方法:第1 步:模擬Requests 模組利用Python 的模擬包,我們定義自訂函數(moc...
    程式設計 發佈於2024-11-19
  • ## 淘汰視圖模型:物件文字或函數 - 哪一個適合您?
    ## 淘汰視圖模型:物件文字或函數 - 哪一個適合您?
    KO 視圖模型:物件文字與函數在 Knockout JS 中,可以使用物件文字或函數來宣告視圖模型。雖然兩者的主要目的都是定義可觀察的屬性和計算函數,但它們之間的關鍵差異會影響封裝、靈活性和程式碼組織。 物件文字:var viewModel = { firstname: ko.observa...
    程式設計 發佈於2024-11-19
  • 為什麼我們應該避免在 MySQL 腳本中使用「SET NAMES」?
    為什麼我們應該避免在 MySQL 腳本中使用「SET NAMES」?
    使用「SET NAMES」的注意事項在MySQL資料庫處理的上下文中,「SET NAMES」的正確使用一直是討論的議題。正如 O'Reilly 的《高效能 MySQL》中所述,在腳本開頭使用「SET NAMES UTF8」的做法因其效率低下而受到質疑。 Unicode 感知資料庫的最佳實務工...
    程式設計 發佈於2024-11-19
  • 如何確保 MySQL 表是使用 Hibernate 使用 InnoDB 引擎建立的?
    如何確保 MySQL 表是使用 Hibernate 使用 InnoDB 引擎建立的?
    如何使用Hibernate 建立MySQL InnoDB 表當使用Hibernate 和JPA 時,使用者在使用InnoDB 建立MySQL 表時經常遇到挑戰引擎而不是MyISAM。為了解決這個問題,一個廣泛推薦的解決方案是透過設定 hibernate.dialect 屬性來配置 Hibernate...
    程式設計 發佈於2024-11-19
  • 使用子類別物件的超類別引用
    使用子類別物件的超類別引用
    考慮一個場景,我們創建一個名為 User 的類,然後創建一個擴展 User 的子類,名為 Employee。 通常,我們會使用以下內容來建立 User 的實例: User user = new User(); 這裡User是變數user的型別,user是保存類別實例的變量,new User()建立...
    程式設計 發佈於2024-11-19

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3