আমি ভাবছি সি ++ এর মধ্যে typeid
এবং এর typeof
মধ্যে পার্থক্য কী । আমি যা জানি তা এখানে:
typeid
টাইপ_ইনফোর জন্য ডকুমেন্টেশনে উল্লেখ করা হয়েছে যা সি ++ হেডার ফাইল টাইপইনফোতে সংজ্ঞায়িত হয়েছে ।typeof
সি এর জন্য জিসিসি এক্সটেনশনে এবং সি ++ বুস্ট লাইব্রেরিতে সংজ্ঞায়িত করা হয় ।
এছাড়াও, এখানে আমি টেস্ট কোড পরীক্ষাটি তৈরি করেছি যা আমি তৈরি করেছি যেখানে আমি আবিষ্কার করেছি 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()
বাস্তবায়ন-সংজ্ঞায়িত। এটি কোনও বৈধ সি ++ সনাক্তকারী নাম হতে হবে না, কেবল এমন কিছু যা টাইপটিকে স্বতন্ত্রভাবে সনাক্ত করে। দেখে মনে হচ্ছে আপনার বাস্তবায়নটি সংকলকের সাধারণ নাম-ম্যাংলিং স্কিমটি ব্যবহার করে।