我看到一段有效的C代码,尝试将其编译为C++,但出现了一个我无法理解的错误。
char* t;
signed char* v = t;
错误:从 char* 转换为 signed char* 是无效的。
根据我的了解,char 和 signed char 在语义上是相同的,但编译器仍认为它们是不同的类型。
我知道这个错误是由这两种类型之间的差异造成的,我的问题是:为什么存在这种差异?
据我所知,char 可以实现为 signed char 或 unsigned char 中的一种,因此应该与其中的一个完全相同。
我查阅了这个问题,但这个答案并没有回答我想知道的点。
signed
和unsigned char
视为算术类型,基本上只是小整数,而char
则是I/O类型--命令行参数、环境以及通过文件的读写都是以字符为单位进行的。 - Kerrek SB的范围是0..255,而
signed char的范围是-127..128。所以你不能将一个值为-42的
signed char转换为
unsigned char,也不能将一个值为142的
unsigned char转换为
signed char。通常情况下,
char被读作
signed char`。 - alle_meijesigned char
以及char
* 是相等的。虽然我搜索了,但我没有看到这个问题... - Geoffroychar
对象能否保存负值是实现定义行为。 - alle_meije