不懂就问,为什么 w 只开 10 是够的
by Darko1227 @ 2023-07-04 13:23:16
![](https://cdn.luogu.com.cn/upload/image_hosting/dtf2l3ur.png?x-oss-process=image/resize,m_lfit,h_30,w_42) 大意了,谢谢老师 : )
可是为什么不开O2它是 $\textcolor{green}{AC}\ $的
by doris_xyb @ 2023-07-04 13:45:40
我不理解······o2是有什么问题吧
by lorry26 @ 2023-07-04 13:48:01
@[doris_xyb](/user/731828) 未定义行为,不必考究,O2只是对程序合法性要求更严格而已。
by Terrible @ 2023-07-04 13:54:25
@[doris_xyb](/user/731828) 因为 C++ 的特性,数组越界属于 UB,对不进行 O2 优化的程序不做 UB 检查,而数组越界时依然可以找到其对应地址,所以可以正常执行。
例:
```cpp
#include <cstdio>
using namespace std;
int a[2] = {1, 2};
int main() {
printf("%d %d\n", a[-1], a[4]);
return 0;
}
```
by __Remake__ @ 2023-07-04 13:56:28
@[doris_xyb](/user/731828) 下次注意数组大小,当心 RE
by LittleAcbg @ 2023-07-04 14:09:43
@[Terrible](/user/195942) @[__Remake__](/user/284123) 谢谢回复,以后再遇到就懂得了
by doris_xyb @ 2023-07-04 14:10:47
@[LuoJingjia](/user/531709) 对哦,居然没RE
by doris_xyb @ 2023-07-04 14:11:43
@[doris_xyb](/user/731828) 你UB了。。。还有这是氧气中毒,不是厌氧
by sz_jinzikai @ 2023-07-06 11:33:20
一般来讲不开 O2 能过一开就 RE 只有两种可能,一种是数组越界了,另一种是非 void 类的函数没有返回值
by AC_love @ 2023-09-12 09:06:36