首頁 > 後端開發 > C++ > 主體

為什麼 C 不支援結構體的指定初始化器?

Patricia Arquette
發布: 2024-11-01 14:05:29
原創
301 人瀏覽過

Why Doesn't C   Support Designated Initializers for Structs?

C 結構初始化:探索不同的方法

在C 中,結構初始化經常會引發關於使用類似於以下特定語法的可能性的問題:本文深入探討了結構初始化的技術和實務面,解決了為什麼C 中沒有實現特定語法的問題。

指定初始化語法

如問題所示,C 支援指定的初始化語法,允許初始化結構體的特定成員。但是,C 中不支援此語法。

C 中不存在的原因

由於以下幾個原因,C 中未實現指定的初始化語法:

  • 無名資料成員: C 結構體可以具有未命名或匿名資料成員,這使得指定的初始化器將引用哪個成員變得不明確。
  • 改進的清晰度和可讀性: 現代 C 初始化技術提供了更明確和可讀的方法來初始化結構,如下所述。

替代初始化方法

為了在沒有指定初始化語法的情況下實現所需的可讀性,C 提供了替代方法:

附註解的分割初始化器:

將初始化器分解為多行每個註解都提供了分配值的清晰指示:

address temp_address = {
  0,  // street_no
  nullptr,  // street_name
  "Hamilton",  // city
  "Ontario",  // prov
  nullptr,  // postal_code
};
登入後複製

C 17 的結構化綁定:

C 17 引入了結構化綁定,它允許為struct 分配值使用命名變數的成員:

auto [street_no, street_name, city, prov, postal_code] = std::make_tuple(0, nullptr, "Hamilton", "Ontario", nullptr);
登入後複製

這種方法提供了明確賦值並增強了可讀性。

結論

而C 中使用的指定初始化語法未在C 中實現,C 提供了替代技術來增強結構初始化期間的可讀性和清晰度。這些技術(例如帶有註解和結構化綁定的拆分初始值設定項)提供了向結構成員賦值的有效方法,從而消除了對指定初始值設定項語法的需要。

以上是為什麼 C 不支援結構體的指定初始化器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!