为了账号安全,请及时绑定邮箱和手机立即绑定

C+运算符中的隐式类型转换规则

C+运算符中的隐式类型转换规则

C++
至尊宝的传说 2019-06-18 10:55:43
我想更好地知道什么时候该投。C+中的隐式类型转换规则是什么,例如,int + float = ?int * float = ?float * int = ?int / float = ?float / int = ?int / int = ?int ^ float = ?等等.。表达式是否总是被计算为更精确的类型?对于Java,规则不同吗?如果我说错了这个问题,请纠正我。C+运算符中的隐式类型转换规则
查看完整描述

3 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

由于其他答案不涉及C+11中的规则,这里有一个。摘自C+11标准(N 3337草案)第5/9节:

此模式称为常用算术变换,定义如下:

-如果任一操作数为范围枚举类型,则不执行转换;如果其他操作数没有相同类型,则表达式格式不正确。

-如果其中一个操作数是长双操作数,则另一个操作数应转换为长双操作数。

-否则,如果任一操作数为双,则另一操作数应转换为双操作数。

-否则,如果其中一个操作数是浮动的,则另一个操作数应转换为浮动操作数。

-否则,应在两个操作数上进行整体晋升。则下列规则适用于促进的操作数:

-如果两个操作数具有相同的类型,则不需要进一步转换。

-否则,如果两个操作数都具有符号整数类型或两者都具有无符号整数类型,则具有较小整数转换级别类型的操作数应转换为级别较大的操作数类型。

-否则,如果具有无符号整数类型的操作数的秩大于或等于另一个操作数类型的秩,则具有符号整数类型的操作数将转换为具有无符号整数类型的操作数类型。

-否则,如果带符号整数类型的操作数的类型可以用无符号整数类型表示操作数类型的所有值,则具有无符号整数类型的操作数将转换为带符号整数类型的操作数类型。

-否则,两个操作数应转换为与带符号整数类型的操作数类型对应的无符号整数类型。

看见这里获取经常更新的列表。


查看完整回答
反对 回复 2019-06-18
  • 3 回答
  • 0 关注
  • 504 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信