【问题标题】:int8_t* and char*int8_t* 和 char*
【发布时间】:2012-09-12 05:43:04
【问题描述】:

为什么const int8_t* cstr = "asdf";这个语句会报错

invalid conversion from ‘const char*’ to ‘const int8_t*’

int8_t*char* 不一样吗? 我在这里错过了一些微妙的东西吗?!

【问题讨论】:

  • 它们的行为可能相同,但仍被视为不同的类型。此外,char 的符号没有指定,并且可以取决于实现选择的内容。

标签: c++ char-pointer


【解决方案1】:

const signed char*const char* 不同。检查您的编译设置,因为这可以解释它。 int8_t 总是(从不说从不=)至少在我见过的任何地方)定义为signed char

【讨论】:

  • signed char 从不char 相同。它们总是不同的类型。
  • 但是char 不是必须是signedunsigned(对于unsigned 可以理解为我们明确写成unsigned char)那么,有没有这样的程序意义差异化——因为signed charunsigned char 的任何地方都足以满足任何程序?
  • @zeropoint char 将是有符号或无符号的,但仍将是与 signed charunsigned char 不同的类型。这与 C++ 中不同类型的意义相同。
  • char、signed char 和 unsigned char 绝对是不同的类型,除非您的编译器将标准弯曲为“有用”(宽松术语),否则将/应该这样对待。例如,MS 的编译器允许配置将所有 'char' 视为 'signed char' 或 'unsigned char',虽然这听起来很不错,但它具有引入过多编译错误的最麻烦的副作用移植到实际执行应有操作的编译器时;遵守标准。
  • 感谢@Craig Nelson 的深入澄清
【解决方案2】:

根据[18.4 整数类型]:

typedef signed integer type int8_t; // optional

还有[3.9.1 基本类型]:

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

int8_t 是有符号整数类型(在我的系统上定义为signed char),charsigned char 是不同的类型,因此它们是不同的。

【讨论】:

    猜你喜欢
    • 2013-04-01
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 2011-07-12
    相关资源
    最近更新 更多