为什么 C++ 允许重复 + 运算符,例如 x = 1 + + + + + + + + 2;

Why C++ allows repeated + operators, like in x = 1 + + + + + + + + 2;

令我惊讶的是 compiles fine:

int main()
{
    constexpr int x = 1 + + + + + + 2;
    static_assert(x==3);
}

我知道 C++ 有奇怪的复杂语法(它试图让所有 C 代码都有效),所以我认为这就是允许这样做的原因,但是有一些很好的积极理由让我们不想要此代码被禁止?

编辑:更奇怪的案例有效:

int main()
{
    constexpr int x = 1 + - - + + + 2;
    static_assert(x==3);
}

在 C++ 中,可以重载运算符。 Boost Spirit 是一个特别好的用例;使用 C++ 语法表示 EBNF 语法。

在这种情况下,能够重复 + 个运算符可能会很有用。

(个人例子:我有一些现金流量建模代码,使用+提前一个周期。自然++提前两个周期。我也使用<<>> 在账户之间转移现金。它非常易读 - 如果我自己可以这么说的话!)

语法定义一元运算符要容易得多

*expression*: /* other things */
              *unary-expression*
              /* more things */

*unary-expression*: + *expression*
                    - *expression*

*expression*: /* other things */
              *unary-expression*
              /* more things */

*non-unary-expression*: /* other things */
                        /* more things */

*unary-expression*: + *non-unary-expression*
                    - *non-unary-expression*

你的投诉最好通过代码审查来解决,而不是语法更改