【发布时间】: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
我知道这是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
是的,这也是未定义的行为,出于同样的原因:在分配期间,i++ 中的 i 的修改相对于 i 的修改是无序的。
【讨论】:
f()修改了i)