Wic*_*chr 4 c++ narrowing c++11
为什么会有警告
缩小从 char 到 double 的转换
我已经知道对于 const char 不会有警告。有很多关于这个的答案。但我想知道,为什么非常量字符会有“可能缩小”的警告?
在某些系统上,尾数是否可能不足以完美表示字符?
int main() {
char c{7};
double a{c};
}
Run Code Online (Sandbox Code Playgroud)
4:13:警告:在 { } [-Wnarrowing] 中缩小从 'char' 到 'double' 的 'c' 转换
它正在缩小,因为标准是这样说的。
7缩窄转换是隐式转换
[...]
(7.3) —从整数类型或无作用域枚举类型到浮点类型,除非源是常量表达式并且转换后的实际值将适合目标类型,并在转换回原始类型时产生原始值 [...]
列表初始化中不允许缩小。使用显式转换(强制转换)。
double a{static_cast<double>(c)};
Run Code Online (Sandbox Code Playgroud)
是的,理论上允许char不能完全表示为double,例如,当两者都是 32 位类型时。这是人为的,但标准允许这样的实现。
| 归档时间: |
|
| 查看次数: |
183 次 |
| 最近记录: |