Conversão de tipo implícito do construtor C ++ [duplicado]
Nov 14 2020
Vamos supor que eu tenha este código:
class A {
public:
A(int y) { cout << y; }
};
int main() {
A a(1.5);
return 0;
}
Mesmo que 1.5 seja um float, esse código funciona e retorna 1. O floatfoi implicitamente convertido em int. Por que não lançou uma exceção? Os construtores dependem da quantidade de parâmetros ou de seus tipos? Onde posso ler sobre isso?
Respostas
5 songyuanyao Nov 14 2020 at 16:03
Porque essa conversão implícita (de doublepara int) é permitida.
Conversões integrais flutuantes
- Um prvalue do tipo de ponto flutuante pode ser convertido em um prvalue de qualquer tipo inteiro. A parte fracionária é truncada, ou seja, a parte fracionária é descartada. Se o valor não se ajustar ao tipo de destino, o comportamento é indefinido (mesmo quando o tipo de destino não tem sinal, o módulo aritmético não se aplica).
Se você não quiser que tal construção aconteça, você pode adicionar um construtor taking doublee marcá-lo como delete. Por exemplo
class A {
public:
A(double) = delete;
A(int y) { cout << y; }
};
BTW: 1.5é um double, não um float.
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas