首頁 > 後端開發 > C++ > C 初始化是否需要左值到右值轉換?

C 初始化是否需要左值到右值轉換?

Susan Sarandon
發布: 2024-12-15 12:33:08
原創
810 人瀏覽過

Does C   Initialization Require Lvalue-to-Rvalue Conversion?

初始化是否需要左值到右值轉換?

C 11 標準對於初始化是否需要左值到右值轉換仍然不明確。但是,有證據表明,除非另有說明,否則右值應作為內建運算符中的操作數。這種方法已擴展到初始化器的上下文。

猜想:值的純右值

假設的規格是,只要需要值,就需要純右值,包括在初始化期間。這意味著初始化物件時需要進行左值到右值的轉換。

猜想的後果

如果初始化需要純右值,則會發生以下情況:

  • int x = x;經歷左值到右值的轉換,導致未定義的行為,因為x 未初始化。
  • int y = 0; 等程式碼的格式錯誤; int x = y;,其中 y 是左值。
  • 不一致的行為,例如z = y 是未定義的行為,但 z = x 不是這樣,假設 x == y。

進一步證據

支持此猜想的其他證據包括:

  • 標準第8.5/16 段暗示需要用於“標準轉換”,但沒有提及類別轉換。
  • 第 4.1 段提到了將左值到右值轉換應用於未初始化物件時的未定義行為。
  • 缺陷報告建議將第4.1 段改寫為包含不確定值的對象,包括未初始化的對象

結論

根據所提供的證據,最可能的解釋是初始化需要純右值,從而在使用未初始化的左值作為初始化器時導致未定義的行為。除非另有說明,這種解釋與期望內建運算符中的右值的更廣泛方法一致。

以上是C 初始化是否需要左值到右值轉換?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板