C ++:根据标准惩罚字符数组有什么特别之处?

时间:2017-10-19 21:51:17

标签: c++ language-lawyer

我有这样的记忆,根据标准,char的数组是C ++中唯一安全可惩罚的类型。也就是说,如果你有char*指针指向char的适当对齐且大小合适的数组的第一个元素,那么reinterpret_cast<T*>指针是安全的,但不是安全的,例如uint8_t根据标准。

但是,我无法在当前的标准草案中找到它。我记错了吗?这对C ++ 17有什么改变吗?有人可以引用标准的相关部分吗?

1 个答案:

答案 0 :(得分:2)

使用T类型的表达式来读取或写入char数组是严格的别名冲突(如果T不是规则中的例外之一)。

严格别名不是双向的:您可以使用char表达式来访问T,但反之亦然。

C ++ 14标准中的部分是[basic.lval] / 10。 See here获取全文。

此外,标准说uint8_t是另一种类型的typedef。所有已知的实现都使其成为charunsigned char的typedef。

有些人建议标准明确指定uint8_t为字符类型。这也可以解决uint8_t x = 'a'; cout << x;没有明确定义的问题。