缩小从 char 到 double 的转换

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' 转换

n. *_* m. 6

它正在缩小,因为标准是这样说的。

7缩窄转换是隐式转换
[...]
(7.3) —从整数类型或无作用域枚举类型到浮点类型,除非源是常量表达式并且转换后的实际值将适合目标类型,并在转换回原始类型时产生原始值 [...]

列表初始化中不允许缩小。使用显式转换(强制转换)。

double a{static_cast<double>(c)};
Run Code Online (Sandbox Code Playgroud)

是的,理论上允许char不能完全表示为double,例如,当两者都是 32 位类型时。这是人为的,但标准允许这样的实现。