में 'टाइपिड' बनाम 'टाइपऑफ' मैं सोच रहा हूं कि typeid
और typeof
के बीच सी ++ में अंतर क्या है। यहाँ मैं क्या पता है:सी ++
typeid
type_info के लिए दस्तावेज़ जो सी ++ हेडर फाइल typeinfo में परिभाषित किया गया है में उल्लेख किया है।typeof
सी के लिए जीसीसी एक्सटेंशन और सी ++ Boost लाइब्रेरी में परिभाषित किया गया है।
इसके अलावा, यहाँ है कि मैं मैं कहाँ की खोज की है typeid
वापस नहीं करता कि मैं क्या उम्मीद बना लिया है परीक्षण कोड परीक्षण है। क्यूं कर?
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)
}
उत्पादन:
bash-3.2$ g++ -Wall main.cpp -o main
bash-3.2$ ./main
i
6Person
8Employee
P6Person
8Employee
किस तरह से आपको लगता है अपने कोड सही प्रकार नाम प्रिंट नहीं करता हो? यह मुझे अच्छा लग रहा है। 'Name()' द्वारा लौटाई गई वास्तविक स्ट्रिंग कार्यान्वयन-परिभाषित है। यह वैध सी ++ पहचानकर्ता नाम नहीं होना चाहिए, बस * कुछ * जो विशिष्ट रूप से प्रकार की पहचान करता है। ऐसा लगता है कि आपका कार्यान्वयन कंपाइलर के सामान्य नाम-मैंगलिंग योजना का उपयोग करता है। –
धन्यवाद रॉब! मैं उन लोगों के नामों की अपेक्षा कर रहा था जैसा कि मैंने en.wikipedia.org/wiki/Typeid में देखा था। नाम-मैंगलिंग क्या कर सकता है? – Tim