【发布时间】:2014-09-08 10:41:06
【问题描述】:
直到现在我还相信没有使用一元 + 运算符。
但后来我遇到了以下示例:
char ch;
short sh;
int i;
printf("%d %d %d",sizeof(ch),sizeof(sh),sizeof(i)); // output: 1 2 4
printf("%d %d %d",sizeof(+ch),sizeof(+sh),sizeof(i)); // output: 4 4 4
是不是说+在这里做类型转换?
因为它的行为与以下相同
printf("%d %d %d",sizeof((int)ch),sizeof((int)sh),sizeof(i)); // output: 4 4 4
这迫使我认为+ 正在做类型转换。
但后来我在double 上试了一下
double f;
printf("%d %d",sizeof(+f),sizeof((int)f),sizeof(f)); // output: 8 4 8
这迫使我重新考虑一元 + 运算符。
所以我的第二个问题是:一元+ 运算符对sizeof 运算符有特殊作用吗?
【问题讨论】:
-
double让您感到困惑的是什么?对于您的第一个问题:是的,+进行转换(IIRC 整数提升,所以float没有得到double,但整数得到(无符号)int或更高等级的东西)。
标签: c sizeof unary-operator integer-promotion