4

为什么会有警告

缩小从 char 到 double 的转换

我已经知道对于 const char 不会有警告。对此有很多答案。但我想知道,为什么非 const char 有一个“可能狭窄”的警告?

是否有可能在某些系统上尾数不大,无法完美代表字符?

int main() {
  char c{7};
  double a{c};
}

4:13:警告:在 {} [-Wnarrowing] 内缩小从 'char' 到 'double' 的 'c' 转换

4

1 回答 1

6

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

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

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

double a{static_cast<double>(c)};

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

于 2019-08-14T09:46:11.807 回答