提问人:0dminnimda 提问时间:8/6/2021 最后编辑:0dminnimda 更新时间:8/6/2021 访问量:134
xor 可以在 C++ 中拥有 UB/IB 吗?
Can xor have UB/IB in C++?
问:
看到这些问题的答案(这个和这个)谈论 C,我无法将这些知识扩展到 C++,所以这不是重复,而是澄清。
更新:我只是在谈论 C++。如果某物是用 C 语言定义的,这并不意味着它是用 C++ 定义的,反之亦然,这就是我问这个问题的原因。
答:
1赞
273K
8/6/2021
#1
根据按位逻辑,异或在整数类型的结果中不能有 UB 或 IB。
xor 运算符对可能导致未定义行为的其他类型的两个操作数执行通常的算术转换。
评论
0赞
0dminnimda
8/6/2021
对不起,我一丝不苟,但是对于一个的补码系统,是否有任何陷阱值不支持有符号整数中的负零(正如本答案中对 C 所指出的)?
2赞
Richard Critten
8/6/2021
@0dminnimda指出,“......但是,所有C++编译器都使用 2 的补码表示,并且从 C++20 开始,它是标准允许的唯一表示形式,...“ en.cppreference.com/w/cpp/language/types 。还有“......自 C++11 以来,字符的 8 位补码和符号和大小表示已被禁止......“ 相同的链接
评论