这里正在发生哪些转换
What conversions are taking place here?
计算以下表达式时会发生哪些转换?
char cval;
int ival;
float fval;
// Assume all 3 have been set to correct values...
a) if(fval)
b) double dval = fval + ival;
c) dval + ival + cval;
我的想法:
a( 我假设if
需要一个bool
值,因此float
被隐式转换为bool
。
b( 我假设fval
被提升为double
,ival
被转换为double
,然后将它们添加。
c( 首先,ival
转换为double
。 然后dval + ival
被评估,这是 double
型。 然后cval
...我不知道它是直接转换为double
,还是先提升为int
。无论如何,在该步骤之后,临时值 dval + ival 将添加到该double
.
我的理解正确吗?
a( fval
在上下文中转换为bool
。
在b
和c
的情况下,">通常的算术转换"适用,这意味着:
b( ival
转换为float
并(使用特殊规则,而不是">通常的算术转换"(fval + ival
转换为double
。
c( ival
转换为double
,cval
转换为double
。
请记住,像这样的问题在细节中,你总是有可能错过一些东西。
A(实际上我在stackoverflow上找到了答案(if(double(有效C++吗?(:if中的所有内容都直接转换为布尔值。
B(首先将iVal转换为浮点数,然后添加到fVal,然后转换为双精度。表达式在赋值之前完全计算/键入。
C( 从左到右的顺序将应用于 + 运算符。所以 iVal 被转换为双倍,然后添加到 dVal,然后 cVal 也会发生同样的情况,所以直接转换为双倍。
相关文章:
- 警告处理为错误这里有什么问题
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 复制交换习惯用法-我们可以在这里使用动态强制转换操作吗
- 为什么我在这里收到C++没有已知的转换错误?
- 这里怎么了?单位转换器
- 为什么这里需要显式类型转换
- 我在这里做双浮点转换吗
- 为什么整数在这里被转换成八进制
- 字符到整数的转换 - 这里发生了什么?
- 在这里做常量转换安全吗
- 这里正在发生哪些转换
- 我可以在这里使用模板特化或类型强制转换吗?
- 这里进行的是哪种显式转换
- 为什么在这里调用转换构造函数
- shared_ptr隐式强制转换在这里失败,在那里成功