Почему список инициализаторов допускает сужение типов в C ++? - PullRequest
0 голосов
/ 26 января 2019

Я вижу два разных результата, играя со списком инициализаторов {} и примитивными типами в C ++.

Я ухожу только с предупреждением сужение преобразования d из двойного в int внутри {}

double d {3.0};
int integer {d};

Но если я сделаю это более явным, то вместо предупреждения я получу ошибку , сужающую преобразование '3.0e + 0' из 'double' в 'int' внутри {}

int integer {3.0};

Разве C ++ 11 не должен предотвращать сужающее преобразование в обоих случаях, если используется {}? Тогда почему это происходит только в одном случае?

Я использую последнюю версию Eclipse для C / C ++ с MingGW. Есть ли вероятность того, что C ++ 14 случайно появился на пути?

1 Ответ

0 голосов
/ 26 января 2019

В вариантах gcc вам нужно указать -Werror=narrowing, чтобы сделать это ошибкой, а не предупреждением. clang и vc ++ более строгие и по умолчанию выдают ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...