C++ int8_t*和char*

C++ int8_t*和char*,c++,char-pointer,C++,Char Pointer,为什么语句const int8_t*cstr=“asdf”给出错误 从“const char*”到“const int8\u t*”的转换无效。 int8\u t*和char*不一样吗? 我是不是错过了一些微妙的东西 常量符号字符*与常量字符*不同。检查编译设置,因为这可以解释它int8_t始终(至少在我所见过的任何地方)定义为有符号字符: typedef signed integer type int8_t; // optional 和[3.9.1基本类型]: 纯字符、有符号字符和无符号字符

为什么语句
const int8_t*cstr=“asdf”给出错误

从“const char*”到“const int8\u t*”的转换无效。

int8\u t*
char*
不一样吗?
我是不是错过了一些微妙的东西

常量符号字符*
常量字符*
不同。检查编译设置,因为这可以解释它<根据[18.4整数类型],code>int8_t
始终(至少在我所见过的任何地方)定义为
有符号字符

typedef signed integer type int8_t; // optional
和[3.9.1基本类型]:


纯字符、有符号字符和无符号字符是三种不同的类型


int8\u t
是有符号整数类型(在我的系统中定义为
signed char
),而
char
signed char
是不同的类型,因此它们是不同的。

它们的行为可能相同,但仍被视为不同的类型。此外,
char
的符号度没有指定,可以根据实现的选择而定。
signed char
char
不同。它们总是不同的类型。但是
char
不是必须是
signed
unsigned
(对于
unsigned
,理解为我们显式地写
unsigned char
),这种区分是否有任何编程意义?因为任何地方的
signed char
unsigned char
都可以满足任何程序的需要?@zeropoint
char
将是有符号的或无符号的,但仍然是与
signed char
unsigned char
不同的类型。这与C++中经常使用的不同类型有相同的意义。char、签char和unchar字符是最明确的不同类型,并且将被视为这样,除非编译器是在将标准弯曲为“有用的”(松散项)。例如,MS’compiler允许配置将所有‘字符’视为‘有符号字符’或‘无符号字符’,虽然这听起来像是一个极好的想法,但它有一个最麻烦的副作用,即在移植到实际执行其任务的编译器时引入过多的编译错误;遵循标准。感谢@Craig Nelson的深入澄清