【问题标题】:why the output is 2 not 7 ? how + sign makes it different [duplicate]为什么输出是 2 而不是 7 ? +符号如何使它不同[重复]
【发布时间】:2017-11-08 15:24:40
【问题描述】:
int main()
{
        int a=3;
        a +=2;
        a = +2;
        printf("%d",a);
}

这个程序的输出是2为什么?

【问题讨论】:

  • a = +2; 等价于a = 2;
  • printf 之前做的最后一件事是将2 分配给a。不知道您还期望什么。
  • a += 2a = a + 2 相同。 a =+ 2 等于 a = +2 等于 a = 2
  • 你试过在调试器中运行它吗?提示:“a = +2”实际上是做什么的?提示:“= +”不是运算符。
  • @FrançoisAndrieux ... + 符号在这里没有任何意义?

标签: c++


【解决方案1】:

为了使输出为 7,您的代码应为

int main()
{
        int a=3;
        a +=2;
        a = a+2;
        printf("%d",a);
}

通过输入 a = +2;在您的 printf 行之前,您只需将 2 的正值分配给您的 a 变量。

a += 2 与 a = a + 2 相同

a =+2 将值设置为 2,无论之前的值是多少。

【讨论】:

    【解决方案2】:

    我不确定为什么在将变量分配给一个值之后(在打印它之前),您想要获得不同的输出。

    这不是魔术。

    a = +2;a= 2; 相同

    您正在覆盖a 的值。所以没有使用a+=2。 可以直接写int a=2

    有趣的是,编译器(任何好的编译器!)可能会使用一种称为死代码消除的技术消除a+=2 语句。

    +2 基本上是将一元运算符+ 应用于整数2。然后是赋值语句。


    除非你重载了一元 +它不应该让你在看这种行为时感觉断章取义。

    更准确地说,您不能重载int 或内置类型。所以没有办法,你正在重载+。 (而且没有用户自定义类型)(Peter Becker 的评论

    【讨论】:

    • 您不能为int(或任何其他内置类型)重载一元operator+。只有在涉及至少一种用户定义类型时,才能重载运算符。
    • @PeteBecker:彼得说得对。
    • @PeteBecker.: 请检查一下..我想这已经完成了?感谢您的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 2019-09-03
    • 2021-11-03
    • 1970-01-01
    • 2018-09-15
    • 2021-03-21
    相关资源
    最近更新 更多