?:是一个三元计算符,?前面是一个判断语句,:左右是表达式值,如果?前为非0,则取左值,否则右值。
不知道对不对,, ? : 是三目运算符,如楼上所述:?前面是一个判断语句,:左右是表达式值,如果?前为非0,则取左值,否则右值。
?:之间没有东西就是空的,可以用空格代替,,namespace ?: "libstrongswan" ,namespace 结果是1,返回空,namespace 结果是1,返回空字符串
这种表达式一般有三个参数的
先计算第一个,如果为真则执行第二个
如果为假则执行第三个
?:中间没有东西应该就是空的指令吧,不做任何操作
就像for(;;)两个分号之间也没有东西,就不进行比较,也就不会跳出这个for
左值不存在一般是判断语句肯定会得出0值的情况,这时其实相当于要执行一个肯定要返回0值的处理,然后给出一个值(把多个执行弄在一起的小技巧而已,不建议使用)。
比如有一个函数可以对一些全局变量初始化,然后在后面的右值计算中需要用到这些值,就可以这样处理(一些值可能不是标准类型,不能直接作为参数传递)
int abc(){ //XXX=... //这里处理全局标准化情况 return 0; } int bca(){ ... // 这里使用XXX这样的全局标准化值以及其它状态,并且根据处理进行返回 } xyz=abc()? :bca();
这个是三目运算符。
计算表达式1的值,若值为非0,则计算表达式2的值,并将表达式2的值作为整个条件表达式的结果;若表达式1的值为0,则计算表达式3的值,并将表达式3的值作为整个条件表达式的结果。