Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
为什么会有警告
缩小从 char 到 double 的转换
我已经知道对于 const char 不会有警告。对此有很多答案。但我想知道,为什么非 const char 有一个“可能狭窄”的警告?
是否有可能在某些系统上尾数不大,无法完美代表字符?
int main() { char c{7}; double a{c}; }
4:13:警告:在 {} [-Wnarrowing] 内缩小从 'char' 到 'double' 的 'c' 转换
它正在缩小,因为标准是这样说的。
7窄化转换是一种隐式转换 [...] (7.3) —从整数类型或无作用域枚举类型到浮点类型,除非源是常量表达式并且转换后的实际值将适合目标类型,并在转换回原始类型时产生原始值 [...]
列表初始化中不允许缩小范围。使用显式转换(强制转换)。
double a{static_cast<double>(c)};
是的,理论上它char可以不完全表示为double,例如当两者都是 32 位类型时。这是人为的,但标准允许这样的实现。
char
double