常量表达式的计算结果为 -1,不能缩小为类型 'char' [-Wc++11-narrowing] 错误
Posted
技术标签:
【中文标题】常量表达式的计算结果为 -1,不能缩小为类型 \'char\' [-Wc++11-narrowing] 错误【英文标题】:constant expression evaluates to -1 which cannot be narrowed to type 'char' [-Wc++11-narrowing] error常量表达式的计算结果为 -1,不能缩小为类型 'char' [-Wc++11-narrowing] 错误 【发布时间】:2021-01-22 13:46:17 【问题描述】:我正在使用旧代码,并且在使用较新的 C++ 标准进行编译时,每个 -1
都会出错。
constant expression evaluates to -1 which cannot be narrowed to type 'char' [-Wc++11-narrowing]
这里是sn-p代码
typedef struct
//short len;
//unsigned short cw;
char x, y, v, w;
testStruct;
const testStruct testArr[] =
1, -1, 0, 0,
-1, 1, 0, 0,
0, 0, -1, 1,
0, 1, -1, 0,
0, -1, 1, 0,
0, 0, 1, -1,
1, 1, 0, 0,
0, 0, -1, -1,
-1, -1, 0, 0,
0, -1, -1, 0,
1, 0, -1, 0,
0, 1, 0, -1,
-1, 0, 1, 0,
0, 0, 1, 1,
1, 0, 1, 0,
0, -1, 0, 1,
0, 1, 1, 0,
0, 1, 0, 1,
-1, 0, -1, 0,
1, 0, 0, 1,
-1, 0, 0, -1,
1, 0, 0, -1,
-1, 0, 0, 1,
0, -1, 0, -1
;
我尝试将代码和括号更改为 warning: narrowing conversion C++11 后面的括号,但我仍然遇到同样的错误。有没有不回退到旧 C++ 标准的解决方案?
【问题讨论】:
你能把结构改成signed char x, y, v, w;
吗?
与其他整数类型不同,char
是有符号还是无符号是未指定的。
【参考方案1】:
要覆盖编译器,你必须写static_cast<char>(-1)
有些事情已经不能被新的 C++ 标准所接受,所以你必须找到一种更现代的方式来做事......
【讨论】:
constexpr char XX = static_cast<char>(-1);
然后将表格中的所有-1
替换为XX
可能会更清晰,并更好地保留表格的列格式。
是否可以只更改 struct 中的 char 类型,或者我必须将 signed char 强制转换为 -1
only?
@Eljay:我当然会这样做。这也将摆脱幻数 -1 并给它一个更有意义的名字!以上是关于常量表达式的计算结果为 -1,不能缩小为类型 'char' [-Wc++11-narrowing] 错误的主要内容,如果未能解决你的问题,请参考以下文章