从char*转换为signed char*

Geo*_*roy 9 c++ signed char

我看到一段有效的C代码,我试图编译为C++,我得到了一个我无法理解的错误.

char* t;
signed char* v = t;
Run Code Online (Sandbox Code Playgroud)

错误:无效转换char*signed char*

从我学到的,char并且signed char在语义上相同,但编译器仍然认为它们是不同的.

我知道错误是由这两种类型之间的差异造成的,我的问题是:为什么存在这种差异?

据我所知char,无论是作为一个signed char还是作为一个实现unsigned char它都应该与一个或另一个相同.


我咨询了这个问题,并没有回答我想知道的问题.

Geo*_*roy 10

实际上我终于找到了规范部分谈论这个:

3.9.1基本类型

  1. 声明为字符(char)的对象应足够大,以存储实现的基本字符集的任何成员.如果此组中的字符存储在字符对象中,则该字符对象的整数值等于该字符的单个字符文字形式的值.实现定义char对象是否可以保存负值.字符可以显式声明为unsigned或signed.Plain char,signed char和unsigned char是三种不同的类型.char,signed char和unsigned char占用相同的存储空间并具有相同的对齐要求(3.11); 也就是说,它们具有相同的对象表示.对于字符类型,对象表示的所有位都参与值表示.对于无符号字符类型,值表示的所有可能位模式表示数字.这些要求不适用于其他类型.在任何特定实现中,普通char对象可以采用与signed char或unsigned char相同的值; 哪一个是实现定义的.