我碰到麻煩等同於以下代碼:const引用的地址是否可以與引用對象的地址不同?
const auto &const_reference = some_object;
assert(&const_reference == &some_object);
當我與G編譯它++ -O3標誌,它不通過斷言。在沒有優化的情況下編譯時,會傳遞斷言。
據我所知,即使在我的項目中有UBs這種情況也不應該是可能的。
是否有任何情況下會出現此類參照行爲?
編輯: 鏈接到實際的代碼:https://github.com/Gray0Ed/ggp_thesis/blob/67606021020546b315ad63b7fd5c2203f3e0086f/rule_engine/aligner.cpp#L177 - 項目有點混亂,它不是真的準備公開顯示,但如果你好奇,隨時看看它。
編輯2: 由於RustyX指出的原始代碼與上面給出的「等價物」不同,請查看他的答案以查看詳細信息。
由於兩個「爲const_reference」和「some_object」指的是同一個對象,平等必須始終堅持。這可能是未定義行爲的一個症狀,但是不可能猜測到哪裏。 (唯一的另一種可能性是它是一個編譯器錯誤,這不太可能。)首先發布一些實際的代碼,而不是「等價的」。 – molbdnilo
什麼版本的gcc?這可能是一個編譯器錯誤,我的gcc認爲即使使用-O3也沒問題。 – Elijan9
你是否超載'運營商&'? – Jarod42