条件运算符值的sizeof?:

-1 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");    
}  
Run Code Online (Sandbox Code Playgroud)

这里的表达式((x == 2) ? f : i)计算i类型为short int的类型.. short int = 2的大小,而sizeof float是4 byts.output应该是"short int"但是我得到输出"float"

Pas*_*uoq 6

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

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

这一点在第6.3.1节C11标准的算术操作数中有所描述,这里有点太长了.