c ++ bool异常 - 为什么这可能?

bri*_*ore -1 c++ language-features

我偶然发现了这个:当postifix两次增加一个bool时,整数值仍然是1而不是预期的2.我想知道为什么会发生这种情况.

bool test = false; // results in integer 0
test++; // results in integer 1
test++; // results in integer 1

// but there still is at least one byte of memory used:
// results in integer 137
*(unsigned char*)(&test) = 137;
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 8

++是指定运算符的方式.参见C++11§5.2.6[expr.post.incr]/1(强调我的):

后缀++表达式的值是其操作数的值.[注意:获得的值是原始值的副本-end note]操作数应该是可修改的左值.操作数的类型应为算术类型或指向完整对象类型的指针.

操作数对象的值通过向其添加1来修改,除非该对象的类型为bool,在这种情况下,它设置为true.[注意:此用途已弃用,见附录D. - 注意事项]

(前缀++运算符具有类似的语言,可以将其应用于bool值.)

bool通过指针或类型的引用修改对象,而不是bool产生未定义的行为.