我在 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/