我有这样的记忆,根据标准,char
的数组是C ++中唯一安全可惩罚的类型。也就是说,如果你有char*
指针指向char
的适当对齐且大小合适的数组的第一个元素,那么reinterpret_cast<T*>
指针是安全的,但不是安全的,例如uint8_t
根据标准。
但是,我无法在当前的标准草案中找到它。我记错了吗?这对C ++ 17有什么改变吗?有人可以引用标准的相关部分吗?
答案 0 :(得分:2)
使用T
类型的表达式来读取或写入char
数组是严格的别名冲突(如果T
不是规则中的例外之一)。
严格别名不是双向的:您可以使用char
表达式来访问T
,但反之亦然。
C ++ 14标准中的部分是[basic.lval] / 10。 See here获取全文。
此外,标准说uint8_t
是另一种类型的typedef。所有已知的实现都使其成为char
或unsigned char
的typedef。
有些人建议标准明确指定uint8_t
为字符类型。这也可以解决uint8_t x = 'a'; cout << x;
没有明确定义的问题。