Ternary Operator

https://en.cppreference.com/w/c/language/operator_precedence

https://en.cppreference.com/w/cpp/language/operator_precedence

以常见的并查集为例子

int f[233];
int F(int x)
{
    return f[x] != x ? f[x] = F(f[x]) : x;
}

上面的代码,在2个语言中都是可以的。

int f[233];
int F(int x)
{
    return f[x] == x ? : x : f[x] = F(f[x]);
}

上面的代码,只能在C++中运行
因为在C语言中,先计算三目运算符,再计算赋值,会解释为

    return (f[x] == x ? x : f[x]) = F(f[x]);

然后C语言中,三目运算符是不返回左值的(也就是返回的东西,不能被赋值)

在C++中,因为三目运算符和赋值的优先级相同,先计算赋值,再计算三目运算符

    return f[x] == x ? x : (f[x] = F(f[x]));

Leave a Reply

Your email address will not be published. Required fields are marked *