Почему "auto ch = unsigned char {'p'}" не компилируется в C ++ 17? - PullRequest
0 голосов
/ 01 марта 2019

Я озадачен.Разве const auto ch = unsigned char{'p'}; не является совершенно допустимым выражением инициализации?Не может быть скомпилирован всеми тремя основными компиляторами с почти идентичными сообщениями об ошибках:

ошибка: ожидается '(' для приведения типа функции или построения типа

Замена фигурных скобокfor ('p') ничего не меняет. Однако он компилируется без ключевого слова signed или unsigned.

Демонстрация в Интернете.

1 Ответ

0 голосов
/ 01 марта 2019

Поскольку для этого вида можно использовать только имя типа из одного слова явное преобразование типа .

Имя типа из одного слова, за которым следует фигурный список инициализацииявляется значением указанного типа designating a temporary (until C++17) whose result object is (since C++17), инициализируемым прямым списком с указанным списком фигурных скобок.

unsigned char не является именем типа, состоящим из одного слова, тогда как char есть.И это также верно для функционального выражения приведения, поэтому ('p') тоже не работает.

В качестве временного решения вы можете

using uc = unsigned char;  // or use typedef
const auto ch = uc{'p'};

или изменить его на другие стили приведения.

const auto ch = (unsigned char) 'p';  // c-style cast expression
const auto ch = static_cast<unsigned char>('p');  // static_cast conversion
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...