在c++中,如何找到变量的类型?
当前回答
带有abi::__cxa_demangle()的typeid操作符(仅GCC / Clang)
#include <iostream>
#include <typeinfo>
#if defined __GNUC__
#include <cxxabi.h> // GCC / Clang only
#endif
int main() {
long long w;
std::cout << typeid(w).name() << std::endl; // x
#if defined __GNUC__ // GCC / Clang only
char * name = abi::__cxa_demangle(typeid(w).name(), 0, 0, 0);
std::cout << name << std::endl; // long long
free(name);
#endif
}
叮当在线
其他回答
如果你有一个变量
int k;
你可以使用它来获取它的类型
cout << typeid(k).name() << endl;
请看下面关于SO的帖子:类似的问题
如果你需要在一个类和一个已知类型之间进行比较,例如:
class Example{};
...
Example eg = Example();
你可以使用这条比较线:
bool isType = string( typeid(eg).name() ).find("Example") != string::npos;
它检查typeid名称是否包含字符串类型(typeid名称有其他损坏的数据,因此最好执行s1.find(s2)而不是==)。
c++和Javascript的主要区别在于c++是静态类型的语言,而Javascript是动态的。
在动态类型语言中,变量可以包含任何东西,它的类型由它所持有的值决定。 在静态类型语言中,变量的类型是声明的,并且不能改变。
可以有动态分派、对象组合和子类型(继承和虚函数),也可以有静态分派和超类型(通过模板CRTP),但在任何情况下,编译器必须知道变量的类型。
如果你不知道它是什么或可能是什么,那是因为你设计了一些东西,因为语言有一个动态类型系统。
如果是这种情况,你最好重新考虑一下你的设计,因为它将进入一个对你所使用的语言来说不自然的领域(最像和毛毛虫一起在高速公路上行驶,或者和汽车一起在水里行驶)
你可以使用typeid操作符:
#include <typeinfo>
...
cout << typeid(variable).name() << endl;
#include <typeinfo>
...
string s = typeid(YourClass).name()