SORU
31 Aralık 2009, PERŞEMBE


' e karşı 'sattığınız' C typeid '

Fark nedir typeid ve C typeof arasında merak ediyorum . İşte öğrendiklerim:

  • typeid C başlık dosyası typeinfo tanımlanan type_info belgelerinde belirtilir.

  • typeof C Boost kütüphanede C için GCC uzantısı ve tanımlanmıştır.

Ayrıca, burada typeid beklediğim gibi değil geri keşfettim nerede yarattığım test kodu test. Herkes neden bana söyleyebilir misiniz?

main.cpp

#include <iostream>  
#include <typeinfo>  //for 'typeid' to work  

class Person {  
    public:
    // ... Person members ...  
    virtual ~Person() {}  
};  

class Employee : public Person {  
    // ... Employee members ...  
};  

int main () {  
    Person person;  
    Employee employee;  
    Person *ptr = &employee;  
    int t = 3;  

    std::cout << typeid(t).name() << std::endl;  
    std::cout << typeid(person).name() << std::endl;   // Person (statically known at compile-time)  
    std::cout << typeid(employee).name() << std::endl; // Employee (statically known at compile-time)  
    std::cout << typeid(ptr).name() << std::endl;      // Person * (statically known at compile-time)  
    std::cout << typeid(*ptr).name() << std::endl;     // Employee (looked up dynamically at run-time  
                                                       // because it is the dereference of a pointer
                                                       // to a polymorphic class)  
 }  

çıkış:

bash-3.2$ g   -Wall main.cpp -o main  
bash-3.2$ ./main   
i  
6Person  
8Employee  
P6Person  
8Employee

CEVAP
31 Aralık 2009, PERŞEMBE


C dili typeof diye bir şey vardır. Derleyici özgü bazı uzantısı bakıyor olmalısınız. Eğer GCC typeof, sonra söz ediyorsanız benzer bir özellik anahtar kelimeler decltype auto C 11 mevcut. Tekrar C typeof böyle bir kelime vardır.

typeid çalışma zamanında tür kimlik bilgileri verir, C dili bir operatör. Buna benzer eşitlik type_info diğer nesneler ile olan temelde type_info bir nesne döndürür.

Unutmayın, sadece tanımlanan özelliğin döndü type_info nesne vardır, var olma, eşitlik - eşitlik-karşılaştırılabilir, yani type_info nesneleri tanımlayan farklı olacaktır karşılaştırmak olmayan eşit süre type_info nesneleri anlatan aynı tür olması karşılaştırın eşit. Her şey uygulama tanımlı. Yöntem bu dönüş farklı "isimleri" bir şey okunabilir, ve hiçbir şey geri dönüş için garanti bile değil iade garantisi yoktur.

Not ayrıca, bu yukarıda muhtemelen anlamına gelir (her ne kadar standart gibi görünmüyor bile açıkça) ardışık uygulamalar typeid aynı tip döndürebilir farklı type_info nesneleri (tabii, yine de karşılaştırmak eşit).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Atlantic Records

    Atlantic Rec

    15 Aralık 2006
  • Curso Online Gratuito

    Curso Online

    4 Aralık 2011
  • InfoPuppet

    InfoPuppet

    15 Kasım 2011