C++ 17标准通过一条规则来修改C++语言的操作顺序的定义,结果如下:
在每个简单赋值表达式E1 = E2和每个复合赋值表达式E1 @ = E2中,E2的每个值计算和副作用在E1的每个值计算和副作用之前被排序.
然而,在编译GCC 8.1下面的代码时,-std=c++17和-Wall
int v[] { 0,1,2,3,4,5,6,7 };
int *p0 = &v[0];
*p0++ = *p0 + 1;
cout << "v[0]: " << v[0] << endl;
Run Code Online (Sandbox Code Playgroud)
我收到以下警告:
main.cpp:266:8: warning: operation on 'p0' may be undefined [-Wsequence-point]
     *p0++ = *p0 + 1;
      ~~^~
Run Code Online (Sandbox Code Playgroud)
输出是:
v[0]: 1
问题是:警告是错误的吗?