В С++ в чем разница между инициализацией списка и другой инициализацией?

В главе C++ Primer 2.2.1 Variable Definitions они сказали, что инициализация с помощью фигурной скобки называется инициализацией списка, и они сказали

При использовании с переменными встроенного типа эта форма инициализации имеет одно важное свойство: компилятор не позволит нам перечислить инициализирующие переменные встроенного типа, если инициализатор может привести к потере информации:

long double ld = 3.1415926536;
int a{ld}, b = {ld}; // error: narrowing conversion required
int c(ld), d = ld; // ok: but value will be truncated

Поэтому я подумал, что в этом разница между инициализацией списка и другими инициализациями. Но когда я попытался проверить это. Я видел, что он работает нормально! И только выдают какие-то предупреждения(Говорили ошибка). Так что я ничего не понял из этого. Так может ли кто-нибудь сказать мне, в чем разница между обычной инициализацией и инициализацией списка?


person rafid100    schedule 12.07.2021    source источник
comment
Это дает ошибку для меня. Какой компилятор используете, с какими настройками?   -  person Nathan Pierson    schedule 12.07.2021
comment
Зависит от компилятора и уровней предупреждений, но сужающие преобразования могут рассматриваться как предупреждение или ошибка. Например, GCC имеет -Wconversion. В Visual Studio есть предупреждение компилятора C4838   -  person Cory Kramer    schedule 12.07.2021
comment
И даже если он выдает только предупреждения, этого тоже достаточно. Опытные, опытные разработчики C++ всегда компилируют свой код с включенным как можно большим количеством опций предупреждений, а также с дополнительной опцией, которая рассматривает все предупреждения как фатальные ошибки.   -  person Sam Varshavchik    schedule 12.07.2021
comment
Mingw-w64 от https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/installer/mingw-w64-install.exe/download кстати, я хочу gcc 10 от mingw, но я не могу получить его от msys2 и cygwin, потому что msys2 требует 64-битной версии, а cygwin не работает при попытке отладки с помощью vscode, так что может кто-нибудь сказать мне, где установить последнюю версию mingw ? (мой комп 32 бит)   -  person rafid100    schedule 12.07.2021
comment
о да, флаги компилятора g++ -std=c++0x -Wall имя файла -o имя файла без расширения.exe   -  person rafid100    schedule 12.07.2021
comment
@rafid100 Вам следует добавить -Werror, и приятно использовать -Wextra   -  person Martin York    schedule 12.07.2021
comment
Но C++ Primer не объяснил этого ›_‹ . Кстати, спасибо, это работает после добавления флагов :-)   -  person rafid100    schedule 12.07.2021
comment
Кстати, @Martin York, вы имеете в виду, что если я не использую -Werror и -Wextra, это всегда выдает предупреждение на всех компьютерах, а не только на моем? или вы имеете в виду, что у всех нет проблемы, только у меня есть проблема? если проблема ТОЛЬКО у меня, то почему?   -  person rafid100    schedule 12.07.2021
comment
@ rafid100 Я предлагаю вам добавить эти дополнительные флаги при компиляции кода, поскольку они в целом уменьшат количество ошибок.   -  person Martin York    schedule 12.07.2021
comment
Omg, я нашел еще один вопрос, почти такой же, как у меня в этой ссылке https://stackoverflow.com/questions/34418485/narrowing-conversion-of-list-initialization-is-an-error-or-just-a-warning что делать?   -  person rafid100    schedule 13.07.2021