很多时候写如下程序:
int nTest = 0;
if (1 == NUMBER)
{
nTest = 100;
}
else
{
nTest = 200;
}
为了减少代码的行数,看起来更加简洁,会使用如下的“? : ”三目运算符来替换:
int nTest (1==NUMBER) ? 100 : 200;
但是可能会忽略三目运算符“? : ”的一个特性:表达式认为“:” 前后的类型是一样的。
如果类型不一样,表达式就会进行默认的类型转换:向编译器认为类型大的那个类型转换,
如果两个类型一个是 int 一个是 double 那么 int 类型会被隐式的转换为 double ,
Visual Studio 2008编译环境认为signed 类型 < unsigned 类型,即 bool ? char : unsigned char; 会变成 bool ? unsigned char : unsigned char;
下图是在VS2008中进行调试时,Disassembly 显示的汇编结果:
图片中的框选部分已经进行了类型的转换。