【问题标题】:Shouldn't be this "=+" a syntax error?这个“=+”不应该是语法错误吗?
【发布时间】:2013-09-04 14:08:04
【问题描述】:

最近我在尝试使用以下代码:

int number = 4;
number += other_variable;//2
...
printf("Number:%d\n",number);//-->6

但我有一个错误输入,而是我有这个代码:

int number = 4;
number =+ other_variable;//2
...
printf("Number:%d\n",number);//-->2

显然这是用gcc 4.7.3gcc 4.4.3 编译的,结果是正常的赋值运算符。 问题是:这不应该是语法错误吗?

【问题讨论】:

  • 反对票和分数有点苛刻。 OP 不知道它是一元加号运算符。
  • 他们不是有点苛刻,他们是厌世者。
  • 顺便说一句,我看不出这是如何复制What's the unary plus operator do?
  • FWIW 与 var --> 0 “操作员”实际上是 var-- > 0 相同。

标签: c++ c gcc


【解决方案1】:

否 - 这被解析为:

number = +other_variable;

即你有赋值和一元 + 运算符。您将其阅读为 =+,但它是两个独立的运算符,=+

【讨论】:

    【解决方案2】:

    不,这只是一个空操作。

    number = +other_variable;
    number = 0 + other_variable;
    

    作为这些操作的补充,它否定:

    number =- other_variable;
    number = -other_variable;
    number = 0 - other_variable;
    

    【讨论】:

    • -1,这肯定不是它在做什么,它不是计算其操作数的绝对值。
    • @unwind 我只是措辞不佳,我并不是说它改变了符号。
    • @molbdnilo 只是我措辞不佳,我并不是说 + 更改了符号或 - 强制使用负号。
    【解决方案3】:

    不,它们是两个独立的运算符。

    number = (+other_variable);

    据我所知,当应用于基本数据类型时,一元 + 运算符除了返回原始值之外不做任何事情。但是它可以重载。

    它是一元 - 运算符的对应物,它反转符号。

    number = (-other_variable);

    【讨论】:

      【解决方案4】:

      不,这不是语法错误。

      这与a=-b; 类似 - 您也可以使用a=+b;。这样做没有效果(对于内置类型,您定义的对象 operator+() 在这里当然可以做一些时髦的事情),但它是完全有效的 C 代码。

      【讨论】:

        猜你喜欢
        • 2011-09-09
        • 1970-01-01
        • 2019-07-28
        • 1970-01-01
        • 1970-01-01
        • 2015-12-09
        • 1970-01-01
        • 1970-01-01
        • 2011-10-23
        相关资源
        最近更新 更多