Добавление к ответу @ NathanOliver - предупреждений и ошибок go, если мы создадим 32-разрядное целое число следующим образом:
uint32_t foo(uint64_t x ) {
auto y = uint32_t(x);
return y;
}
Итак, (x)
и {x}
здесь не семантически эквивалентный (даже если бы тот же конструктор получал вызов, будь он классом). Гарантия отсутствия сужения в стандарте, по-видимому, применима только к инициализации списка, IIANM.
Итак, примите это как мотивацию для использования инициализации в фигурных скобках, если вы хотите быть очень осторожными (или скобки, если вы хочу, чтобы тебя не беспокоили.)