【问题标题】:Do lvalue references hide undefined behaviour?左值引用是否隐藏未定义的行为?
【发布时间】:2015-03-18 09:29:03
【问题描述】:

我知道这是UB:

i = i++ + 1;

确实,clang 3.4 编译器会在该行发出警告消息。

但在下面的代码中它不再这样做了:

int i{}; // in global scope
int &f() {return i;}

int main()
{
    f() = i++ + 1;
}

这也是 UB 吗?

【问题讨论】:

    标签: c++ c++11 undefined-behavior


    【解决方案1】:

    是的,这也是未定义的行为,出于同样的原因:在分配期间,i++ 中的 i 的修改相对于 i 的修改是无序的。

    【讨论】:

    • (忽略我之前的评论,我看错了问题,虽然f()修改了i
    • 我是这么认为的。感谢您的确认。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    相关资源
    最近更新 更多