O operador typeid é usado para obter as informações de tipo de uma expressão. As informações de tipo são muito importantes para linguagens de programação, pois descrevem várias propriedades dos dados:
-
Para dados de tipos básicos (int, float e outros tipos integrados em C++), o conteúdo contido nas informações de tipo é relativamente simples, referindo-se principalmente ao tipo de dados.
-
Para dados de tipo de classe (ou seja, objetos), as informações de tipo referem-se à classe à qual o objeto pertence, aos membros que ele contém, ao relacionamento de herança, etc.
As informações de tipo são um modelo para a criação de dados.Quanto de memória os dados ocupam, quais operações eles podem realizar, como operá-los, etc., são todos determinados por suas informações de tipo.
O objeto de operação de typeid pode ser uma expressão ou um tipo de dados. Aqui estão duas maneiras de usá-lo:
typeid(tipo de dados)
typeid(expressão)
dataType é o tipo de dados, expression é a expressão, que é muito semelhante ao operador sizeof, exceto que sizeof às vezes pode omitir parênteses ( )
, enquanto typeid deve ter parênteses.
typeid salvará as informações de tipo obtidas em um objeto do tipo type_info e retornará uma referência constante do objeto; quando informações de tipo específico são necessárias, elas podem ser extraídas por meio de funções de membro. O uso de typeid é muito flexível, veja o exemplo a seguir (só pode ser executado em VC/VS):
#include <iostream>
#include <typeinfo>
using namespace std;
class Base{ };
struct STU{ };
int main(){
//获取一个普通变量的类型信息