我读了一个c ++教程,说算术运算符返回可能的最小数据类型(即如果添加了2个整数,则返回类型将为int,如果添加了float和double,则返回类型将为double)。但是,它还表示对短路的算术运算会返回整数。考虑到短路占用的内存少于整数,为什么会发生?教程错了吗?该教程适用于c ++ 11,所以也许在c ++ 14中已经弃用了?谢谢!
答案 0 :(得分:1)
考虑到短片占用的内存少于整数,为什么会这样?
那是因为标准是这样说的。
教程错了吗?
没有
从C ++ 11标准(注意通常的算术转换位):
5个表达
...
9许多期望算术或枚举类型操作数的二元运算符会以类似的方式引起转换并产生结果类型。目的是产生一个通用类型,它也是结果的类型。此模式称为通常的算术转换,其定义如下:
...
- 否则,应对两个操作数执行整数促销(4.5)。
整体推广在标准中定义为:
4.5整体促销
1整数转换等级(4.13)小于
bool
,char16_t
,char32_t
或wchar_t
以外的整数类型的prvalue如果int
可以表示源类型的所有值,则可以将{1}}转换为int
类型的prvalue;否则,源prvalue可以转换为int
类型的prvalue。
如上所述,在将一些二元运算符应用于操作数之前,unsigned int
被提升为short
。
有关运算符int
和+
的部分明确提到通常的算术转换是在操作数上执行的:
5.7添加剂运算符
1添加剂操作符
-
和+
从左到右分组。通常的算术转换是针对算术或枚举类型的操作数执行的。
答案 1 :(得分:0)
类型int
是目标系统的“自然大小”。小于int
的整数类型在算术表达式中被提升为int
,这样处理器可以最有效。这些日子可能不那么令人担忧,但它仍然是C和C ++语言的一部分。