我看到一段有效的C代码,我尝试将它编译为C++,并且出现了一个我无法理解的错误。从char *转换为signed char *
char* t;
signed char* v = t;
error: invalid conversion from
char*
tosigned char*
从我的教训,char
和signed char
具有相同的语义,但仍被视为由编译器不同。
我知道这个错误是由这两种类型的差异引起的,我的问题是:为什么这种差异存在?
据我知道char
被实现为一个或signed char
作为unsigned char
所以它应该是相同的一个或另一个。
我查阅了this question,它没有回答我想知道的观点。
我喜欢把signed'的'和'无符号char'为*算术*类型,只是小的整数,本质上,而'char'是I/O类型 - 命令行参数,环境和通过文件读/写都是以字符的形式完成的。 –
这个问题已经在http://stackoverflow.com/questions/436513/char-signed-char-char-unsigned-char回答 - 最基本的解释是'unsigned char'的范围从0到255, 'signed char'的范围是-127..128。所以你不能将-42的'signed char'转换为'unsigned char'或将''unsigned char''转换为'signed char'。 'char'通常读为'signed char'。 –
@alle_meije和'signed char'和'char' *是相等的。我没有看到这个问题,虽然我搜索它... – Geoffroy