我想确保我的C++师的返回类型的理解,C++ - 划分的类型?
int/int => return is int?
float/float => return is which type? float?
double /double => return is double?
int/double => return is double?
int/float => return is float?
请纠正我,如果我错了。
谢谢
我想确保我的C++师的返回类型的理解,C++ - 划分的类型?
int/int => return is int?
float/float => return is which type? float?
double /double => return is double?
int/double => return is double?
int/float => return is float?
请纠正我,如果我错了。
谢谢
所有这些都是正确的。以下是C++ 03标准所述(§5/ 9):
许多期望算术或枚举类型操作数的二元运算符以相似的方式导致转换和产出结果类型。目的是产生一个共同的类型,这也是结果的类型。
- 如果操作数是
long double
型的,其它应被转换为long double
:该模式如下被称为通常的算术转换,其被定义。- 否则,如果任一操作数是
double
,则另一个应转换为double
。- 否则,如果任一操作数是
float
,则另一个应转换为float
。- 否则,积分促销(4.5)应在两个操作数上执行。
- 然后,如果任一操作数是
unsigned long
,则另一个应转换为unsigned long
。- 否则,如果一个操作数是
long int
和其他unsigned int
,那么如果一个long int
可以表示unsigned int
的所有值,则unsigned int
应被转换为long int
;否则两个操作数都应转换为unsigned long int
。- 否则,如果任一操作数是
long
,则另一个应转换为long
。- 否则,如果任一操作数是
unsigned
,则另一个应转换为unsigned
。[注:否则,剩下的唯一情况是,两个操作数是
int
]
你在所有情况下都是正确的。涉及至少一个浮点类型的操作规则是,如果任一类型为long double
,则结果为long double
;否则,如果任一类型为double
,结果为double
,否则结果为float
。
两个int
之间的算术运算产生一个int
结果。
其他类型之间的规则稍微复杂一些,可以取决于实现;对于几乎所有的操作,整数升级意味着操作数被提升为至少产生一个大小为int
大小的结果的大小类型。
仅考虑三种类型(float
,double
和int
):
double
,那么结果将是double
。float
,那么结果将是float
。int
。结果将被键入(如果规则存在)的分配。如果你有int x = dY + iZ;
然后升级会导致加法结果为double,但是当它被赋值给x时,它将被转换为int。谷歌“在C++中的变量提升”了解更多细节。
operator/
对于基本数据类型(就像大多数(如果不是全部的话)基本类型的运算符一样)返回其两个操作数中最强类型。
因此,您所有问题的答案是肯定的。
一般来说,浮点类型比整数更大幅度和unsigned比签署强...
定义>为“强于”,我们可以说:
长双> double> float> unsigned long> long> unsigned int> int> unsigned short> short> unsigned char> char
你确定你没有'unsigned T'和'T'吗? – 2011-04-25 16:54:51
@克里斯答:哼,是的。 '无符号T'比'T'强。另请参阅@ildjarn回答。 – peoro 2011-04-25 16:57:38
谢谢,我学到了一些东西。 +1 – 2011-04-25 16:58:44
粗略地说,在C++中,在任何情况下,两个操作数都转换为“最大”类型操作前的两个操作数类型是exe cuted。请参阅MSDN Standard Arithmetic Conversions。
是第二颗子弹打算成为“如果别人”?无论哪种方式,前两个子弹的顺序都是倒退的,你忘了长双倍。 – 2011-04-25 16:43:57
@Eric:尼斯点。编辑它。 – Nawaz 2011-04-25 16:45:36