fre*_*low 32 c++ double warnings type-conversion c++11
static_assert(sizeof(unsigned) == 4, ":(");
static_assert(sizeof(double) == 8 ,":(");
unsigned u{42};
double x{u};
Run Code Online (Sandbox Code Playgroud)
g ++ 4.7.1抱怨这段代码:
warning: narrowing conversion of 'u' from 'unsigned int' to 'double' inside { }
Run Code Online (Sandbox Code Playgroud)
为什么这是一个缩小的转换?是不是每个人都能unsigned完美代表double?
Mik*_*our 37
为什么这是一个缩小的转换?
因为定义包括(以我的重点):
C++ 11 8.5.4/7甲收缩转换是从一个整数类型的隐式转换[...] [...]对浮点型,除非源是一个常量表达式和之后的实际值转换将适合目标类型,并在转换回原始类型时生成原始值.
u 不是常量表达式,因此无论源类型的所有可能值是否都可以在目标类型中表示,它都是一个缩小的转换.
是不是每个人都能
unsigned完美代表double?
这是实施的定义.在32位unsigned和double52位尾数的常见情况下,就是这种情况; 但是一些实现具有更大unsigned和/或更小的double表示,因此依赖于该假设的代码是不可移植的.
| 归档时间: |
|
| 查看次数: |
7368 次 |
| 最近记录: |