Melhor resposta
A verificação de tipo é feita pelo verificador de tipo que verifica se o tipo de uma construção (constante, variável, matriz, lista, objeto) corresponde ao que é esperado em seu contexto de uso. Isso garante que certos tipos de erros de programação sejam detectados e relatados. Por exemplo, considere a seguinte expressão envolvendo o operador de módulo 8\% 3.5, esta expressão resultará em erro, pois o operador de módulo espera dois inteiros. O verificador de tipo precisa saber sobre – Construções sintáticas na linguagem (por exemplo, operadores) – Tipos básicos de linguagem (int, real) – Regras para atribuir tipos a construções Por exemplo, “se ambos os operandos de + são int, o resultado é int”
Existem dois tipos de verificação de tipo Estático e Dinâmico
Verificação de tipo estático: verificação de tipo feita em tempo de compilação. Ao usar essas linguagens, você é forçado a declarar o tipo de variáveis antes de usá-las (compilador precisa saber a que tipo de dados a variável pertence). Por exemplo, considere uma instrução em c ++ int a = 10; aqui, o compilador precisa saber o tipo de dados da variável “a” antes de usá-la. Por exemplo, C, C ++, JAVA, C # são alguns Linguagens tipadas estaticamente
Dinâmicas Verificação de tipo: verificação de tipo feita em tempo de execução. Ao usar essas linguagens, você não precisa especificar ou declarar o tipo de variável, em vez disso, o próprio compilador descobre que tipo é uma variável quando você atribui um valor a ela pela primeira vez. Agora considere algumas instruções em python: str = “Python” str2 = 10 Aqui você não precisa declarar o tipo de dados. O próprio compilador saberá a qual tipo a variável pertence quando você atribui um valor pela primeira vez (str1 é do tipo de dados “String” e str2 é do tipo “int”). Por exemplo, VBScript e Python são Linguagens digitadas dinamicamente.
Resposta
A verificação de tipo está testando se a operação está ativada variáveis usa tipo compatível. Linguagens diferentes têm níveis diferentes de compatibilidade de variáveis. A linguagem fortemente marcada tem regras rígidas sobre os tipos de variáveis na expressão. Do outro lado da moeda, existem linguagens que permitem misturar diferentes tipos. Essas linguagens compensarão de alguma forma os tipos mistos usando algumas regras de conversões de variáveis.
Por exemplo, em algumas linguagens de tipo estrito, você só pode adicionar dois inteiros ou dois números de ponto flutuante, mas sinalizar um erro se tentar para adicionar um inteiro a um float. Em outras linguagens, se você adicionar um número inteiro a um ponto flutuante, ele pode converter implicitamente o número inteiro em um ponto flutuante e, em seguida, realizar a adição.
C ++ está em algum lugar no meio. Em C ++, ele permite algumas conversões implícitas. C e C ++ têm algumas lacunas. Primeiro, é chamado de fundição. Casting é basicamente dizer ao compilador para considerar uma variável como “este tipo” em oposição ao valor declarado. Por exemplo, no exemplo acima, se quisermos que o float seja tratado como um int, podemos converter o float em um int.
Exemplo: int x, a; float y, b;
b = x + y;
a = x + (int) y; ou você pode querer a = (int) (x + y);
Como os ponteiros geralmente são digitados, podemos usar a conversão para fazer uma estrutura parecer outro tipo de estrutura.
typedef struct {/ * members * /} A;
typedef struct {/ * members * /} B;
A ax;
B * bp;
bp = &ax; // Erro: diferentes tipos de ponteiros!
bp = (B *) &ax; // define efetivamente uma sobreposição A com B como uma união
Com ponteiros, há também um void * que é um ponteiro curinga. Permite o uso onde qualquer tipo de ponteiro é permitido, tais funções de tipo mem, por exemplo, memcpy.