При инициализации списка требуется сужающее преобразование

Я читал о сужении конверсии на сайте cpp. Я вроде как понял, но то, что я не понимаю, это то, почему ошибка присутствует только в первой строке.

    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

Почему ошибка присутствует только в первой строке, а не во второй?

3

Решение

Потому что компилятор должен выдавать диагностику (в вашем случае ошибка) для сужения только за инициализация списка (А.к.а. равномерная инициализация), введено начиная с C ++ 11. Для инициализации до C ++ 11 без фигурных скобок диагностика не требуется.

Увидеть cppreference.com документация для более подробной информации.

Также см этот ответ почему компилятор должен выдавать только предупреждение, а не ошибку.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]