算术中的c ++常量类型转换

阿基米德520

背景

我正在尝试在Mac上使用Clang的C ++ 11中学习。

问题

如书中所述,当浮点类型在算术中遇到int或小写时,后者将转换为float。在以下情况下确实如此:

cout << 9.0 / 5 << endl;

结果产生1.8000,但是当我尝试使用后缀来确保常量的类型时,例如:

cout << 9.0f / 5i << endl;

结果产生1我想知道为什么?其背后是否有不同的规则或机制?

沙菲克·雅格莫(Shafik Yaghmour)

使用i作为后缀是一个扩展其指示的假想恒定,而不是也由支撑的整数gcc如果没有警告,启用clang将仅解释5i为复数。在打开警告(特别是-Wconversion)的情况下,它会发出以下警告:

warning: imaginary constants are a GNU extension [-Wgnu-imaginary-constant]
std::cout << 9.0f / 5i << std::endl;
                    ^

warning: implicit conversion discards imaginary component: '_Complex float' to 'bool' [-Wconversion]
std::cout << 9.0f / 5i << std::endl;
~~~          ~~~~~^~~~

因此,看起来没有重载,_Complex因此结果被转换为bool我们可以使用以下示例更清楚地看到这一点:

float f = (9.0f / 5 + 0i) ;
std::cout << f << std::endl ;

输出1.8

如果只需要一个int文字,则不需要后缀,其他整数后缀分别u, l, ul, ll, ull用于unsigned, long, unsigned long, long long and unsigned long long

因此,在您的情况下:

9.0f / 5

会是你想要什么,如果你想确保9.0被解释为浮动否则会被解释为一个

5也将转换为浮点数,因为/运算符将对其操作数执行常规的算术转换

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

算术中的c ++常量类型转换

来自分类Dev

C++ 类型转换指向常量变量的指针

来自分类Dev

C 类型转换:按位或算术

来自分类Dev

C ++整数常量的类型

来自分类Dev

从预处理器中的常量中删除强制类型转换

来自分类Dev

从预处理器中的常量中删除强制类型转换

来自分类Dev

大小写内的C ++类型转换常量字符串

来自分类Dev

转换值类型常量

来自分类Dev

C++ - 如何从具有常量大小的算术类型数组创建类构造函数?

来自分类Dev

无效*算术和类型转换

来自分类Dev

C ++中的类型转换

来自分类Dev

C ++中的类型转换

来自分类Dev

C ++中的类型转换

来自分类Dev

c 中的类型转换

来自分类Dev

定义了算术类型(在C ++中)以迎合各种硬件的特殊性

来自分类Dev

尝试解析C11标准中的常用算术转换规则

来自分类Dev

C ++常规算术转换不转换

来自分类Dev

一元+/-运算符如何可能导致“ -a”或“ + a”中的整数提升,而“ a”是算术数据类型的常量/变量?

来自分类Dev

指定OpenCV中算术运算的输出类型

来自分类Dev

算术运算中的奇怪类型提升

来自分类Dev

如何正确地将int类型的算术运算结果存储为C ++中的double类型和不同类型?

来自分类Dev

C中的惰性算术

来自分类Dev

C ++中的算术运算

来自分类Dev

分配算术表达式的结果时,何时在 C 中进行类型强制转换?

来自分类Dev

算术操作数类型转换

来自分类Dev

C中的类型转换错误

来自分类Dev

C中的类型转换指针

来自分类Dev

目标C中的类型转换

来自分类Dev

C中的类型转换混乱