[Resolvido][C++] Cast de primitivo

Apenas uma questão de curiosidade.

Eu ouvi dizer que em C++ os casting de variaveis primitivas são feitas em tempo de compilação e não em tempo de execução.

Alguém pode me confirmar isso?

Espera um pouco - casts em C++ podem ser várias coisas:
a) Podem ser uma conversão simples. Por exemplo:

long y = 10L;
int x = (int) y;

Neste caso, se o cast é feito em tempo de execução ou de compilação depende de o compilador conseguir determinar se é possível, através de análise de fluxo, atribuir o valor “10” à variável x. Isso depende, por exemplo, se foi passada uma opção do compilador para otimizar o código ou não.

b) Pode ser uma chamada a um construtor. Por exemplo:

complex z = (complex) 10;

Neste caso, novamente pode ser que essa chamada ao construtor seja feita em execução ou em compilação.

c) Pode ser uma coisa semelhante ao cast do Java (que envolve uma checagem de tipos e uma reinterpretação dos ponteiros). Por exemplo:

Automovel *a = new Fiat();
Fiat *p = dynamic_cast<Fiat *> a;

A verificação de tipos pode ser feita em compilação (porque a partir da análise de fluxo o compilador consegue determinar que o valor sendo atribuído a “p” é realmente um ponteiro para um objeto da classe Fiat) ou então só em execução.

Obrigado pela resposta completa. Minha dúvida era sobre o primeiro dos 3 que você mostrou.

Seria numa situação em que você tem um float. O usuário passa o valor que será atribuido para a variavel (ou esse valor virá do banco de dados). Você usa essa variável para fazer alguns cálculos e depois no final você da um cast para uma variável do tipo int. Me disseram que o compilador do C++ consegue fazer o cast em tempo de compilação (ao mesmo tempo me disseram que no Delphi ele faz o cast apenas em tempo de execução, o que eu acreditava que todas as linguagens faziam) então fiquei curioso para saber como que ele faz isso.

Obs: admito que minha pergunta não ficou perfeita.

O cast é feito em tempo de execução, nesse caso.

Digamos que o compilador esteja gerando código que não use instruções SSE2; nesse caso, ele provavelmente irá gerar uma instrução FIST (que converte um número de ponto-flutuante que está no stack 8087 para um inteiro). No caso do SSE2, a instrução gerada será CVTSD2SI .

Mais uma vez Sr. entanglement, agradeço pela sua atenção e por responder mais uma de minhas perguntas.