narrowing专题

c++中什么叫做窄式转换(narrowing conversions)以及窄式转换解决方案

c++中什么叫做窄式转换(narrowing conversions)以及窄式转换解决方案 什么叫做窄式转换(narrowing conversions) 窄化转换(narrowing conversion)是指将一个值转换为另一种类型,但转换过程中丢失了信息或超出了目标类型的表示范围的情况。在C++中,窄化转换是一种可能导致数据丢失或不确定行为的类型转换,因此在某些情况下是不允许的。 例如

narrowing conversion of 'XXX' from 'int' to 'char' inside{}

问题前提: 代码中有一段十六进制表示中文的, 例如:char a[] = { 0xE5, 0x85,  0xB6, 0xE5, 0xAE, 0x83, 0x00 }; 使用g++ test.cpp 编译时没有问题,但如果使用g++ -std=c++0x test.cpp编译就会报标题的错。 问题原因大概是使用-std=c++0x后,char类型范围出现了缩减,导致了报错。 修改方案: