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
都可以满足任何程序的需要?@zeropointchar
将是有符号的或无符号的,但仍然是与signed char
和unsigned char
不同的类型。这与C++中经常使用的不同类型有相同的意义。char、签char和unchar字符是最明确的不同类型,并且将被视为这样,除非编译器是在将标准弯曲为“有用的”(松散项)。例如,MS’compiler允许配置将所有‘字符’视为‘有符号字符’或‘无符号字符’,虽然这听起来像是一个极好的想法,但它有一个最麻烦的副作用,即在移植到实际执行其任务的编译器时引入过多的编译错误;遵循标准。感谢@Craig Nelson的深入澄清