相关疑难解决方法(0)

C++ 17排序:赋值左侧的后增量

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

问题是:警告是错误的吗?

c++ operator-precedence assignment-operator c++17

4
推荐指数
1
解决办法
344
查看次数