混叠漏洞是否适用于签名字符?

Bee*_*ope 13 c++ signed char strict-aliasing language-lawyer

在C ++中,存在一个别名漏洞,该漏洞允许通过某些字符类型的指针来读取或写入任何对象的对象表示。

这仅适用于charunsigned char还是适用于signed char

Sto*_*ica 18

不,该规定不适用于signed char

[basic.lval]

8如果程序尝试通过以下类型之一以外的glvalue访问对象的存储值,则行为未定义:

  • [...]
  • 一个charunsigned charstd?::?byte类型。

上面的引用包含了最后一个关于字符类型别名的项目符号。signed char被排除。

但是,这也是CWG第350期所涉及主题的一部分,因此可能会发生变化。根据问题的发展方向,其目的是(最终,希望是?)定义明确。

  • @mch这是因为在某些情况下,该标准不允许对`char`进行签名。例如,所有带符号的类型都允许使用陷阱表示,因此,“带符号的字符”可能无法代表每个字节,而“ char”则必须是无符号的。 (6认同)
  • @Artyer-不能相信我忘记了。尽管值得注意的是,随着C ++ 20向“仅2的补码”迈进,`signed char'不再具有陷阱值的位置http://eel.is/c++draft/basic.fundamental#7。 (5认同)