K&R第二版(第71页) - 我一定错过了解释:
sign = (s[i] == '-') ? -1 : 1;
Run Code Online (Sandbox Code Playgroud)
这个上下文是一个将字符串转换为double的函数.这部分特别是在功能跳过空白区域之后.我推断它正在检查正值或负值,并在函数结束时将其保存为-1或+1以进行符号转换...return sign * val /power;
我想这样做不是更好推断......我是特别不确定什么?
和: 1
正在做的事情(或任何地方,对于这个问题).
这看起来像是一个抽象的if
陈述.当?
检查真理,:
是else
......是这样吗?它仅限于if/else
?
我是初学者,之前我没有遇到过这种表达式语法,所以我想知道是否有一个特殊的原因它似乎经常被正式的if/else
替代 - 也许,可读性?
小智 15
这看起来像是一个抽象的if语句,其中
?
检查真相,:
是否......就是这样?
是的,差不多.它被称为"条件运算符"(有时不完全准确地称为"三元运算符",因为它是C中唯一的三元运算符).这不是一个陈述,它是一个表达,它有一个价值.如果第一个参数的计算结果为true,则计算其第二个参数;如果结果为false,则计算其第三个参数.因此
sign = (s[i] == '-') ? -1 : 1;
Run Code Online (Sandbox Code Playgroud)
相当于
if (s[i] == '-') {
sign = -1;
} else {
sign = 1;
}
Run Code Online (Sandbox Code Playgroud)
Pub*_*bby 14
它有点像抽象if语句.
那是对的.这被称为"三元条件运算符".
正则if
用于语句,而条件运算符用于表达式.
我想知道是否有一个特殊的原因它似乎经常被正式的if/else取代 - 除此之外,也许是可读性?
有些情况下,语句上的分支是不够的,您需要处理表达式级别.
例如,考虑初始化:
const int foo = bar ? 5 : 3;
Run Code Online (Sandbox Code Playgroud)
这不能使用普通if
/ 写入else
.
无论如何,那些说它等同于if
/的人else
都是不精确的.虽然生成的程序集通常是相同的,但它们不是等效的,它不应该被视为简写版本if
.简单地说,if
尽可能使用,并且只在需要分支表达式时使用条件运算符.