C++ 运算符中的隐式类型转换规则 [英] Implicit type conversion rules in C++ operators
问题描述
我想更好地知道什么时候应该施法.C++中加、乘等的隐式类型转换规则有哪些,比如
I want to be better about knowing when I should cast. What are the implicit type conversion rules in C++ when adding, multiplying, etc. For example,
int + float = ?
int * float = ?
float * int = ?
int / float = ?
float / int = ?
int / int = ?
int ^ float = ?
等等……
表达式是否总是被评估为更精确的类型?Java 的规则是否不同?如果我对这个问题的表述不准确,请纠正我.
Will the expression always be evaluated as the more precise type? Do the rules differ for Java? Please correct me if I have worded this question inaccurately.
推荐答案
在 C++ 中(对于 POD 类型)操作符总是作用于相同类型的对象.
因此,如果它们不相同,则将提升为匹配另一个.
运算结果的类型与操作数相同(转换后).
In C++ operators (for POD types) always act on objects of the same type.
Thus if they are not the same one will be promoted to match the other.
The type of the result of the operation is the same as operands (after conversion).
if:
either is long double other is promoted > long double
either is double other is promoted > double
either is float other is promoted > float
either is long long unsigned int other is promoted > long long unsigned int
either is long long int other is promoted > long long int
either is long unsigned int other is promoted > long unsigned int
either is long int other is promoted > long int
either is unsigned int other is promoted > unsigned int
either is int other is promoted > int
Otherwise:
both operands are promoted to int
注意.操作的最小大小为 int
.所以short
/char
在操作完成前被提升为int
.
Note. The minimum size of operations is int
. So short
/char
are promoted to int
before the operation is done.
在您的所有表达式中,int
在执行操作之前被提升为 float
.操作的结果是一个float
.
In all your expressions the int
is promoted to a float
before the operation is performed. The result of the operation is a float
.
int + float => float + float = float
int * float => float * float = float
float * int => float * float = float
int / float => float / float = float
float / int => float / float = float
int / int = int
int ^ float => <compiler error>
这篇关于C++ 运算符中的隐式类型转换规则的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!