我写了一个函数,是对一个 __int128 类型的数(在最开始 #define int __int128 了)的质因子分解。
code
这份代码在 C++20 O2 下输出了 fac: 2 1 2。这显然不合理,因为 8=23。正常的输出应当是:fac: 2 3 8,这也是不开 O2 下输出的。
而如果我在 O2 下取消注释注释的那两行,也就是让代码强制执行 while 循环,输出就是正常的了。
由此可以推断,O2 将中间的部分优化掉了(只执行一遍)。
然而,如果我的所有变量不开 __int128,开 O2 且加注释的输出也没问题。这是不是可以理解为,O2 对新加的 __int128 的部分优化处理挂了,导致出现了这个问题?
如果在正式比赛中,可以放心使用 O2 + __int128 吗?