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]));