постоянное выражение оценивается как -1, которое не может быть сужено до типа 'char' [-Wc++11-narrowing] ошибка

Я работаю со старым кодом, и при компиляции с использованием более нового стандарта C++ я получаю ошибку на каждом -1.

constant expression evaluates to -1 which cannot be narrowed to type 'char' [-Wc++11-narrowing]

Вот фрагмент кода

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}
};

Я попытался изменить код и скобки на круглые скобки после предупреждения: сужение преобразования С++ 11 , но я все еще получаю ту же ошибку. Есть ли решение без возврата к старому стандарту С++?


person gameon67    schedule 22.01.2021    source источник
comment
Можете ли вы изменить структуру на signed char x, y, v, w;?   -  person Eljay    schedule 22.01.2021
comment
В отличие от других целочисленных типов, не указано, является ли char подписанным или использованным.   -  person molbdnilo    schedule 22.01.2021


Ответы (1)


Чтобы переопределить компилятор, вы должны написать static_cast<char>(-1)

Некоторые вещи больше не приемлемы с новыми стандартами C++, поэтому вам нужно найти более современный способ сделать что-то...

person U. W.    schedule 22.01.2021
comment
constexpr char XX = static_cast<char>(-1);, а затем заменить все -1 в таблице на XX может быть более разборчивым и лучше сохранить форматирование столбцов таблицы. - person Eljay; 22.01.2021
comment
можно ли просто изменить тип символа в структуре или мне нужно преобразовать подписанный символ в -1 only? - person gameon67; 22.01.2021
comment
@Eljay: Конечно, я бы сделал это так же. Это также позволит избавиться от магического числа -1 и дать ему более осмысленное имя! - person U. W.; 25.01.2021