(1.5==(1.0||1.5)?1:2)为什么返回2呢?

C++里的,好奇怪,(1.5==(1.0||1.5)?1:2)为什么返回2呢?

1.0||1.5返回是bool值和1.5不相等,所以是2

这句可以翻译为
if(1.5 == (1.0||1.5))
{
//表达式值为1
}else
{
//表达式值为2
}
注意 1.5 == (1.0||1.5)也就是 1.5 == 1 也就是false。1.0||1.5是一个布尔表达式,值为1
故而应该执行else,表达式值为2.

你特意说在C++中,其实在c中也是这样。在java中,这句话应该会报错。

对于或逻辑1.5==1可以执行,不用判断后边的1.5==1.5,所以为2

对于这样的复杂的运算符判断,要根据运算符优先级一步一步计算。因为括号的优先级最高,因此先执行(1.0||1.5),显然为真,也就是(1.0||1.5)=1,
然后计算1.5==1,结果为假,应该返回冒号后边的的表达式,所以结果为2

首先,要搞明白三目运算符的运算顺序,其次再去运算结果。

你那样写是有错误的,你可以试试这样写:(1.5==1.0)||(1.5==1.5)?1:2