fly 发表于 2014-3-26 22:21:57

类似d1>d2?d1:d2;的语句怎样理解?

例如在:
如果一个函数返回了引用,那么该函数的调用也可以被赋值。这里有一函数,它拥有两个引用参数并返回一个双精度数的引用:
  double &max(double &d1,double &d2)
  {
  return d1>d2?d1:d2;
  }
 

当中,d1>d2?d1:d2;可以理解为:
if(d1>d2) return d1;else if return d2;

系统 发表于 2014-3-27 21:09:00

唯一的一个三目运算符,这个例子用的d1,d2,不是表达式,还不算复杂

Avenger 发表于 2014-4-3 23:41:07

水一发~~~~~~~~~~~~~~~~~~

skeet 发表于 2014-12-12 21:19:09

d1>d2?d1:d2翻译成句子是
if(d1 > d2)
    return d1;
else
   return d2;


hapro 发表于 2015-7-5 00:02:28

记住运算符的优先级,就知道什么先算,什么后算了。这个表达式,大于号“>”的优先级高于条件运算符“?:”,因此先判断d1>b2,在决定计算结果是d1还是d2。

hapro 发表于 2015-7-5 00:04:53

本帖最后由 hapro 于 2015-7-5 00:11 编辑

hapro 发表于 2015-7-5 00:02
记住运算符的优先级,就知道什么先算,什么后算了。这个表达式,大于号“>”的优先级高于条件运算符“?:” ...

BTW,如果是CPP,这个函数可以写成个模板了。

template<type T>
T max(T v1, T v2)
{
    return v1>v2 ? v1 : v2;
}

这样,各种基本数据类型可直接使用之。

另外,对于int、double之类的基本数据类型,如果不需要改动传入参数的值,可以不用&符号来传引用,感觉没啥意义。

PS.
当然,如果是想有下列这样的语法糖
max(x,y)+=1.0;
直接能让x或y中间较大的变量增加1.0而不需其他赋值,可以用原帖中的定义方式。
页: [1]
查看完整版本: 类似d1>d2?d1:d2;的语句怎样理解?