|
|
Basic types | |||||||||||||||||||||
Fixed width integer types(C++11) | |||||||||||||||||||||
Fixed width floating-point types(C++23) | |||||||||||||||||||||
| |||||||||||||||||||||
Numeric limits | |||||||||||||||||||||
C numeric limits interface | |||||||||||||||||||||
Runtime type information | |||||||||||||||||||||
|
Member functions | ||||
type_info::operator==type_info::operator!= (until C++20) | ||||
(C++11) | ||||
bool operator==(const type_info& rhs)const; | (1) | (noexcept since C++11) (constexpr since C++23) |
bool operator!=(const type_info& rhs)const; | (2) | (noexcept since C++11) (until C++20) |
Checks if the objects refer to the same types.
The | (since C++20) |
Contents |
rhs | - | another type information object to compare to |
true if the comparison operation holds true,false otherwise.
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_constexpr_typeinfo | 202106L | (C++23) | Constexpr forstd::type_info::operator== |
#include <iostream>#include <string>#include <typeinfo>#include <utility> class person{public:explicit person(std::string n): name_(std::move(n)){}virtualconststd::string& name()const{return name_;} private:std::string name_;}; class employee:public person{public: employee(std::string n,std::string p): person(std::move(n)), profession_(std::move(p)){} conststd::string& profession()const{return profession_;} private:std::string profession_;}; void print_info(const person& p){if(typeid(person)==typeid(p))std::cout<< p.name()<<" is not an employee\n";elseif(typeid(employee)==typeid(p)){std::cout<< p.name()<<" is an employee ";auto& emp=dynamic_cast<const employee&>(p);std::cout<<"who works in "<< emp.profession()<<'\n';}} int main(){ print_info(employee{"Paul","Economics"}); print_info(person{"Kate"}); #if __cpp_lib_constexpr_typeinfoifconstexpr(typeid(employee)!=typeid(person))// C++23std::cout<<"class `employee` != class `person`\n";#endif}
Possible output:
Paul is an employee who works in EconomicsKate is not an employeeclass `employee` != class `person`
checks whether the referred type precedes referred type of anothertype_info object in the implementation defined order, i.e. orders the referred types (public member function)[edit] |