[英]Why is (int&)0 ill-formed?
根據[expr.cast] / 4,C風格的強制轉換按順序嘗試以下強制轉換:
const_cast
static_cast
static_cast
后跟const_cast
reinterpret_cast
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.