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)
这++是指定运算符的方式.参见C++11§5.2.6[expr.post.incr]/1(强调我的):
后缀
++表达式的值是其操作数的值.[注意:获得的值是原始值的副本-end note]操作数应该是可修改的左值.操作数的类型应为算术类型或指向完整对象类型的指针.操作数对象的值通过向其添加1来修改,除非该对象的类型为bool,在这种情况下,它设置为true.[注意:此用途已弃用,见附录D. - 注意事项]
(前缀++运算符具有类似的语言,可以将其应用于bool值.)
bool通过指针或类型的引用修改对象,而不是bool产生未定义的行为.
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |