簡體   English   中英

為什么(int&)0格式不正確?

[英]Why is (int&)0 ill-formed?

根據[expr.cast] / 4,C風格的強制轉換按順序嘗試以下強制轉換:

  1. const_cast
  2. static_cast
  3. static_cast后跟const_cast
  4. reinterpret_cast
  5. reinterpret_cast后跟const_cast

以下演員表格很好:

const_cast<int&>(static_cast<const int&>(0))

然而,GCC和Clang都拒絕了演員陣容(int&)0 為什么?

cast(int&)0被拒絕的原因是因為你試圖將一個文字作為一個真正有意義的引用。 &運算符需要一個可引用的值,您不能引用文字。 編譯器發現你正在將一個文字作為一個右值轉換為main.cpp:2:11: error: invalid cast of an rvalue expression of type 'int' to type 'int&'

這個問題並沒有真正歸結為強制轉換的層次結構,而是無法將文字作為引用。

編輯:快速注釋,我對你的措辭有點困惑,是const_cast<int&>(static_cast<const int&>(0)); 被編譯器接受? 它不應該由於將左值作為右值。 如果是這樣,我一定是誤解了這個問題,我會回答我的回答。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM