c++ - 为什么 C++ 不接受字符数组的有符号或无符号字符

标签 c++ arrays char

我在 Visual Studio 2017 中以 native 模式使用 C++。该编译器编译下面的语句没有任何提示:

const char * AnArrayOfStrings[]  = {"z1y2x3w4", "Aname"};

但是,如果我更改上述语句以指定 char 是有符号还是无符号,编译器会发出 C2440 错误。例如,下面的语句,编译:

const signed   char * AnArrayOfStrings2[] = {"z1y2x3w4", "Aname"};

const unsigned char * AnArrayOfStrings2[] = {"z1y2x3w4", "Aname"};

当 char 的符号显式时,我看不到编译器拒绝编译语句的原因。

我的问题是:我没有看到编译器拒绝编译这些语句的充分理由吗?

感谢您的帮助(我在 StackOverflow、C++ 文档中进行了研究,我使用了 Google,并查阅了大约十二本 C/C++ 书籍,试图自己找到答案,但我仍然找不到原因。)

最佳答案

"z1y2x3w4"const char[9] 并且没有从 const char*const signed char 的隐式转换*.

你可以使用 reinterpret_cast

const signed char * AnArrayOfStrings[]  = {reinterpret_cast<const signed char *>("z1y2x3w4"),
                                           reinterpret_cast<const signed char *>("Aname")};

关于c++ - 为什么 C++ 不接受字符数组的有符号或无符号字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49145132/

相关文章:

c++ - 为什么将字符串(数组)转换为 char 会导致小写 "c"

c++ - Unix:如何清除串口I/O缓冲区?

php - 在不知道一对关联数组中的键的情况下获取值

arrays - Swift 检查最大值并使用

java - 将 EmailMessage 转换为 ByteArrayOutputStream

c - 此字符副本如何工作 : *(*((char**)p))++ = ch; in c

Python。 "zip"字符和列表的最佳方法

c++ - 如何根据区域设置为文件中的所有单词添加软连字符?

c++ - 是否有 fread() 等效项可用于处理 vector <char> 或 char 数组?

java - 如何将一个或多个单词获取到字符串中的字符中