1

По стандарту C++11 списковая инициализация должна запрещать сужение типа. Однако компилятор g++ (версия 4.8.1) без ошибок компилирует следующий код:

int main(int argc, char** argv)
{
    double d = 1.234;
    int i {d};  //  здесь происходит сужение и потеря точности!
    cout << i;  // вывод: "1"
    return 0;
}

Почему компилятор не выдает ошибку?

7
  • проверил, у меня компилятор ругнулся warning: narrowing conversion of ‘d’ from ‘double’ to ‘int’ inside { } [-Wnarrowing] gcc version 4.8.3 20140624 (Red Hat 4.8.3-1) (GCC)
    – KoVadim
    26 июл 2014 в 19:10
  • @DarkGenius: А с какими опциями вы запускаете компилятор? Попробуйте включить все warning'и.
    – VladD
    26 июл 2014 в 21:25
  • @VladD, настройки по умолчанию, не изменял их.
    – DarkGenius
    27 июл 2014 в 2:19
  • @DarkGenius: А с -Wall как?
    – VladD
    27 июл 2014 в 16:23
  • @VladD, я выбрал пункт "Очистить и пересобрать проект", и предупреждение появилось. Если в дальнейшем выбирать просто "Собрать проект", предупреждение не появится до очистки.
    – DarkGenius
    30 июл 2014 в 17:28

0

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Посмотрите другие вопросы с метками или задайте свой вопрос.