gpt4 book ai didi

c - 一元 + 运算符是否进行类型转换?

转载 作者:太空狗 更新时间:2023-10-29 16:33:33 26 4
gpt4 key购买 nike

直到现在我都相信没有使用一元 + 运算符。

但后来我遇到了以下示例:

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 %d", sizeof(+f), sizeof((int)f), sizeof(f)); // output: 8 4 8

这迫使我重新考虑一元 + 运算符。

所以我的第二个问题是:一元+运算符在sizeof运算符中有特殊作用吗?

最佳答案

一元 + 对其操作数执行整数提升,我们可以通过转到草案 C99 标准部分 6.5.3.3 一元算术运算符 上面写着(强调我的前进):

The result of the unary + operator is the value of its (promoted) operand. The integer promotions are performed on the operand, and the result has the promoted type.

6.3.1 算术操作数部分说:

If an int can represent all values of the original type, the value is converted to an int; otherwise, it is converted to an unsigned int. These are called the integer promotions.48) All other types are unchanged by the integer promotions.

请注意,整数提升不会改变所有其他类型,因此 double 保持 double。这也适用于float,它不会被提升为double

另请注意,使用 %d 作为 sizeof 的结果是未定义的行为,因为结果是 size_t。正确的格式说明符应该是 %zu

关于c - 一元 + 运算符是否进行类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24805580/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com