答案 0 :(得分:4)
在C中(我不知道C ++),类型unsigned char
是唯一保证所有可能的位表示都具有特定值的类型。没有陷阱表示,没有无效值,没有填充位,没有任何东西(可以是其他类型)。
然而,出于某种原因制作一个依赖于未知位模式的程序是个坏主意。
答案 1 :(得分:0)
未定义的行为并不意味着非法或您的程序将在此处崩溃。
如果使用未初始化的变量(如果分配基本变量并且不为其赋值,则会发生这种情况,字符类型是一种特殊的基本类型),则根本不确定该值。它可以是任何东西。你可能不会理会它可以是任何东西,因为例如你可以稍后分配一个值,也许只在某些情况下。
然而,当这变得严重时,当你读取变量的值并根据未初始化的值做出进一步的决定时,例如在条件中:
int x;
if (x > 0) {
...
} else {
...
}
这会为您带来here。
你联系的答案是,以下内容非常好:
int x;
if (someCase) {
x = ...
} else {
...
}
// later:
if (someCase) {
// read x
}