C ++ 0x tornará o código a seguir e um código semelhante malformado, porque requer a chamada conversão de estreitamento de a double
em a int
.
int a[] = { 1.0 };
Estou me perguntando se esse tipo de inicialização é muito usado em código do mundo real. Quantos códigos serão quebrados por essa mudança? É muito difícil consertar isso em seu código, se ele for afetado de alguma forma?
Para referência, consulte 8.5.4 / 6 de n3225
Uma conversão de estreitamento é uma conversão implícita
- de um tipo de ponto flutuante para um tipo inteiro, ou
- de long double para double ou float, ou de double para float, exceto onde a fonte é uma expressão constante e o valor real após a conversão está dentro do intervalo de valores que podem ser representados (mesmo que não possa ser representado exatamente), ou
- de um tipo de número inteiro ou tipo de enumeração sem escopo para um tipo de ponto flutuante, exceto onde a fonte é uma expressão constante e o valor real após a conversão se ajustará ao tipo de destino e produzirá o valor original quando convertido de volta ao tipo original, ou
- de um tipo inteiro ou tipo de enumeração sem escopo para um tipo inteiro que não pode representar todos os valores do tipo original, exceto onde a fonte é uma expressão constante e o valor real após a conversão se ajustará ao tipo de destino e produzirá o valor original quando convertido de volta ao tipo original.