【问题标题】:Why "++" operator over bool is defined?? however "--" is not in C++ [duplicate]为什么定义了bool上的“++”运算符?但是“--”不在C++中[重复]
【发布时间】:2015-07-21 22:00:21
【问题描述】:

我想知道为什么 ++ 运算符定义在 bool... 但是当我尝试 -- 运算符时,它没有为 bool 定义..

有人能解释一下这背后的原因吗?

【问题讨论】:

  • 仅供参考,不推荐使用增量。

标签: c++ operator-keyword


【解决方案1】:

从标准 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)。

所以反过来你不能的原因是因为它违反了标准。

【讨论】:

    【解决方案2】:

    参考文档: https://msdn.microsoft.com/en-us/library/tf4dy80a.aspx

    当后缀或前缀 ++ 运算符应用于类型变量时 bool,变量设置为true。后缀或前缀 -- 运算符 不能应用于这种类型的变量。

    【讨论】:

    • 这个答案没有解决这个问题:为什么?
    • @Lii 在某种意义上它确实......“你不能”,因为文档说你不能。 :)
    • @DavidHoelzer, Jerry:这些都是真实的陈述,但他们没有回答问题!为什么要这样设计语言?
    • @Lii 你可以问问“设计师”
    • @Lii 可能从false==0true!=0 开始。这给了我们(使用整数)++false==true++true==true。然后是令人惊讶的结果--false==true,以及最令人惊讶的--true=={true or false}
    猜你喜欢
    • 2011-02-09
    • 1970-01-01
    • 2020-03-03
    • 2011-08-25
    • 2021-04-14
    • 2021-11-03
    • 2011-07-10
    • 2010-11-23
    相关资源
    最近更新 更多