我正在使用许多字节编译低级代码。在某些情况下,使用双引号括起来的旧 C 字符串来定义对我来说很方便。
但是,当使用 gcc 或 g++ 进行编译时(不知道其他编译器的行为),它一直困扰着我的指向字符串的符号。
基本上当我写这个的时候
const unsigned char & refok = *"ABCDEFGHI";
EDIT:好的,上面的代码并没有真正起作用,因为理论上它只是保留对字符串第一个字符的副本的引用。由于优化,它实际上允许某些编译器访问所有字符串,但可能随时中断。
or this
const unsigned char oktoo[10] =
{'A','B','C','D','E','F','G','H','I',0};
编译器什么也没说。
但它绝对拒绝这个:
const unsigned char * bad = "ABCDEFGHI";
有消息
error: invalid conversion from
‘const char*’ to ‘const unsigned char*’
[-fpermissive]
这甚至不是一个警告,而是一个error.
我想知道为什么这个问题比使用引用或将单个字符从有符号字符转换为无符号字符时更严重?或者我错过了什么?