关于对++运算的困惑

P3919 【模板】可持久化线段树 1(可持久化数组)

AC代码中`cnt`加了两次
by return_second @ 2024-03-19 19:16:44


赋值运算符两边对同一个变量修改是 UB。
by fjy666 @ 2024-03-19 19:16:45


@[return_second](/user/1047309) 错误的
by __Tonycyt__ @ 2024-03-19 19:22:50


WA代码改成 ```cpp T[cnt++].left=cnt; T[cnt++].right=cnt; ```
by __Tonycyt__ @ 2024-03-19 19:25:08


@[fjy666](/user/366338) 倒没有同时修改
by __Tonycyt__ @ 2024-03-19 19:25:48


@[__Tonycyt__](/user/667037) 对同一个变量修改。
by lonely_seele @ 2024-03-19 19:32:19


@[fjy666](/user/366338) 您的意思是```=```左边有```cnt```右边就不能```++cnt```吗
by microchip @ 2024-03-19 19:59:10


@[microchip](/user/241838) 诶,这个非常神奇,确确实实是这样的。一般来说,如果一个赋值式的左右两边都有同一个变量出现,那么其中一边的 ++/-- 可能会出现问题(两边都一样,\_\_Tonycyt\_\_ 说的应该是错的),编译器一般会提示你 `[-Wsequence-point] operation on 'variable' may be undefined` 的警告。 比如我自己曾写过这么一行代码: `for (int i = 1; i <= n; a[i] = i ++);` 我想初始化数组 `a[]` 为 $\{1,2,3,\cdots,n\}$,然而它并没有成功。
by _venti @ 2024-04-21 17:23:00


|