我在C++中遇到过很多次操作符“ ?: ”,我搜索了一下,但没有找到答案,也不是很清楚它的作用,例如,这是一个操作符的片段:
int conversor(char caracter) {
return ( isdigit(caracter) ? 0 :
(islower(caracter) ? 1 :
(isupper(caracter) ? 2 :
(caracter == ' ') ? 3 : 4)));
}
运算符的作用是什么?符号“?”后面的数字是什么意思??
条件运算符/三元运算符
例子
它计算它的第一个操作数,如果结果值不等于 0,它计算它的第二个操作数。否则,它将评估其第三个操作数,如以下示例所示:
它相当于:
欲了解更多信息,我给你留下以下路线: https ://riptutorial.com/operador_ternario
运算符
? :
, 是三元运算符。计算问号 (?
) 之前的表达式,如果该表达式可以解释为 true,则结果将是问号之后的表达式,否则结果将是冒号之后的表达式:
。从概念上讲,它的行为如下:
如果是 13 号星期二,
valor
它将包含true
,因为它将计算为表达式dia() == 13
。这是关于三元运算符的一般特性,在c、c++、c#、java、javascript、objective-c、swift、scala、ruby、lua等几十种语言中都可以找到. 现在我要提一下三元运算符在 C++ 中的特殊功能:
仅评估为真的条件分支。
三元运算符中不成立的部分不求值。所以这段代码:
它会
A1
显示没有参数的程序,因为它只执行a()
,如果它同时执行它会显示AB1
。作为左右值工作。
三元运算符可用于赋值的右侧:
或者它可以用在作业的左侧:
所有操作数都被强制转换为相同的类型。
三元运算符的完整表达式的类型将是所有表达式类型的公共类型,因此:
a
will be的类型( what is和what isdouble
之间的常见类型)而will be的类型( what is和what is之间的常见类型)。1.f
float
2.
double
b
long
3l
long
4u
unsigned int
请注意,如果涉及转换,则不能将具有三元运算符的表达式用作左值:
三元运算符不可重载。
C++中只有四个不能重载的操作符:
::
。.
。.*
。?:
。评估 ?: 之前给出的条件,如果满足,则在“:”之前执行操作,否则,执行继续“:”的操作。
它相当于: