【发布时间】:2015-07-21 22:00:21
【问题描述】:
我想知道为什么 ++ 运算符定义在 bool... 但是当我尝试 -- 运算符时,它没有为 bool 定义..
有人能解释一下这背后的原因吗?
【问题讨论】:
-
仅供参考,不推荐使用增量。
标签: c++ operator-keyword
我想知道为什么 ++ 运算符定义在 bool... 但是当我尝试 -- 运算符时,它没有为 bool 定义..
有人能解释一下这背后的原因吗?
【问题讨论】:
标签: c++ operator-keyword
从标准 5.2.6.1
操作数对象的值被修改 给它加 1,除非对象是 bool 类型,在这种情况下它被设置为 true。 [注意:此用法已弃用, 见附录 D。——尾注]
和5.2.6.2强调我的
后缀 -- 的操作数与后缀 ++ 运算符类似地递减,除了操作数 不应为 bool 类型。 [注:前缀递增和递减见5.3.2。 ——尾注]
还有附件D
D.1 带布尔操作数的增量运算符 [depr.incr.bool] 1 不推荐使用带有 ++ 运算符的 bool 类型的操作数(参见 5.3.2 和 5.2.6)。
所以反过来你不能的原因是因为它违反了标准。
【讨论】:
参考文档: https://msdn.microsoft.com/en-us/library/tf4dy80a.aspx
当后缀或前缀 ++ 运算符应用于类型变量时 bool,变量设置为true。后缀或前缀 -- 运算符 不能应用于这种类型的变量。
【讨论】:
false==0 和true!=0 开始。这给了我们(使用整数)++false==true、++true==true。然后是令人惊讶的结果--false==true,以及最令人惊讶的--true=={true or false}。