C++ · Intermediário · Inglês · Técnico
narrowing conversion
Conversão implícita que pode perder valor ou precisão, como double para int ou um int grande para char. Com inicialização por chaves, o compilador a trata como erro.
Onde usar
Surge ao trocar parênteses por chaves em construtores e ao inicializar contêineres. É uma proteção: int x{3.5} não compila, enquanto int x = 3.5 apenas trunca.
Em código
double d = 3.7;
int a = d; // trunca para 3, compila
// int b{d}; // erro: estreitamento
int c{static_cast<int>(d)}; // explícito
char k{65}; // ok: constante cabeExemplos
The braces turned that silent truncation into an error.
As chaves transformaram esse truncamento silencioso em erro.
Use static cast if the narrowing conversion is intentional.
Use static cast se a conversão estreita for intencional.
Cuidado
Com parênteses ou sinal de igual a conversão estreita compila, talvez com warning; só a inicialização por chaves a proíbe, exceto para constantes que cabem no tipo.
Sinônimos
conversão com perda