我遇到了与以下代码等效的问题:
const auto &const_reference = some_object;
assert(&const_reference == &some_object);
当我使用g++ -O3标志编译它时,它无法通过断言。当没有优化编译时,断言被通过。
据我所知,即使我的项目中存在未定义行为,这种情况也不应该发生。
在何种情况下,引用的此类行为是可以预期的?
编辑:实际代码链接:https://github.com/Gray0Ed/ggp_thesis/blob/67606021020546b315ad63b7fd5c2203f3e0086f/rule_engine/aligner.cpp#L177 - 项目有点混乱,并不真正准备好公开展示,但如果你好奇,请随意查看。
编辑2:如RustyX指出,原始代码与我上面给出的“等效”代码不同,请查看他的答案以了解详细信息。
operator &
运算符? - Jarod42some_object
突然引用了另一个对象,因为它在另一个作用域中被重新定义了。例如:int i; int& ri = i; { int i; assert (&i != &ri); }
- MSalters