我碰到麻烦等同于以下代码: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