C++中 ? : 是一个三目运算符(1)所谓的三目运算符就是有三个操作数 (操作数就是操作对象,如++i的操作对象只有i,那么运算符 ++ 就是单目运算符,又比如i+j有两个操作对象i和j,那么运算符 + 就是双目运算符)(2)三目运算符 ? :在C++中只有一个三目运算符?:,三目条件表达式格式如下:<表达式1>?<表达式2>:<表达式3>先计算<表达式1>,当<表达式1>非0时,三目条件表达式取<表达式2>的值,否则取<表达式3>的值。三目条件表达式的功能可以解释成个简单的条件语句。三目运算符 ?: 的结合性是从右至左(3)例如下列程序段:#include using namespace std;void main(){int a=l,b=2,c=3;cout<<"[ab?b--:++a] = "<(a>b?b--:++a)<b?++a:++b] = "<<(c+=a>b?++a:++b)<b?a:b>c?b:c] = "<<(a>b?a:b>c?b:c)<b?b--:++a] = 2[c+=a>b?++a:++b] = 6[a>b?a:b>c?b:c] = 6程序中有4个cout语句,第1个cout语句输出三目条件表达式的值,显然是在第2个cout语句中,三目条件表达式的值取++a的值,结果是因为ab为0, b--并没有执行,故b的值仍然是2。第2个cout语句已修改了变量a的值,使a=2。在第3个cout语句中,由于三目运算符的优先级高于赋值运算符,所以先计算三目条件表达式a>b?++a:++b,由于a>b为0,所以三目条件表达式取++b的值,结果是3;再计算赋值表达式c+=3,结果是6。此行cout语句修改了b、c两变量的值,使b=3、c=6。在第4个cout语句中,由于三目运算符是从右结合的,所以先计算b>c?b:c,结果为6;再计算a>b?a:6,结果为6。注意:在本例中, 因上一个语句的执行产生的副作用改变了变量的值,所以影响下一个语句的条件判断。例中引入多个三具条件表达式,要注意右结合性。例中还引入了赋值表达式与三目条件表达式的混用,这要注意两种运算符的优先级才能做出正确的判断,这个实例应引起读者的高度注意。参考文献:《C++程序设计》 中国水利水电出版社 2012年1月第2版