【发布时间】:2013-06-24 16:48:31
【问题描述】:
我刚刚偶然发现:当 postifix 将布尔值递增两次时,整数值仍然是 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;
【问题讨论】:
-
在不查看由此产生的任何机器代码的情况下,我会假设当您告诉编译器在 @987654322 上工作时,编译器会忽略除最不重要的 bit 之外的所有内容@。
bool + 1也有可能变成bool & 1作为优化或防止溢出,这会导致您看到的行为。编译器可能会做一些更聪明的事情;你真的应该包含这段代码的程序集。 -
A
bool只能是true或false,将其设置为 137 是未定义的行为
标签: c++ language-features