条件运算符值的sizeof?:

时间:2015-03-20 09:55:48

标签: c

#include <stdio.h>  
int main()  
{ int x = 1;    
short int i = 2;   
float f = 3; 
  if(sizeof((x == 2) ? f : i) == sizeof(float))    
  printf("float\n");  
  else if (sizeof((x == 2) ? f : i) == sizeof(short int))     
  printf("short int\n");    
}  

这里表达式((x == 2) ? f : i)求值为i,类型为short int .. short int = 2,而sizeof float为4 byts.output应为&#34; short int&#34 ;但我得到了输出&#34; float&#34;

2 个答案:

答案 0 :(得分:6)

  

这里表达式((x == 2)?f:i)求值为i,类型为short int

这不是通常的算术转换在C中的工作方式。? :的第二和第三个操作数首先转换为公共类型,并且该类型是结果的类型表达方式。而且,由于促销活动,该类型在任何情况下都不会小于int

这一点在C11 standard 6.3.1算术操作数一节中有所描述,这在这里引用的时间有点太长了。

答案 1 :(得分:1)

sizeof是编译时运算符,因此无法计算x==2。它通过转换为公共类型来评估三元表达式的类型,在本例中为float(三元表达式的第二个和第三个操作数必须属于同一类型) ,int转换为float。)