在c++中,如何找到变量的类型?
当前回答
你当然可以使用typeid(x).name(),其中x是变量名。它实际上返回一个指向数据类型的const char指针。现在,看看下面的代码。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n = 36;
char c = 'A';
double d = 1.2;
if(*(typeid(n).name()) == 'i'){
cout << "I am an Integer variable" << endl;
}
if(*((char *) typeid(d).name()) == 'd'){
cout << "I am a Double variable" << endl;
}
if(*((char *) typeid(c).name()) == 'c'){
cout << "I am a Char variable" << endl;
}
return 0;
}
注意第一个和第二个if是如何工作的。
其他回答
你可以使用typeid操作符:
#include <typeinfo>
...
cout << typeid(variable).name() << endl;
我不确定我的回答是否有用。
简单的回答是,你不需要/不想知道变量的类型来使用它。
如果你需要给一个静态变量一个类型,那么你可以简单地使用auto。
在更复杂的情况下,你想在类或结构中使用“auto”,我建议使用template with decltype。
例如,假设你正在使用别人的库,它有一个名为“unknown_var”的变量,你想把它放在一个向量或结构中,你完全可以这样做:
template <typename T>
struct my_struct {
int some_field;
T my_data;
};
vector<decltype(unknown_var)> complex_vector;
vector<my_struct<decltype(unknown_var)> > simple_vector
希望这能有所帮助。
编辑:为了更好地衡量,这里是我能想到的最复杂的情况:有一个未知类型的全局变量。在这种情况下,您将需要c++14和模板变量。
就像这样:
template<typename T> vector<T> global_var;
void random_func (auto unknown_var) {
global_var<decltype(unknown_var)>.push_back(unknown_var);
}
它仍然有点乏味,但它是最接近无类型语言的。只要确保当你引用模板变量时,总是把模板规范放在那里。
如果你有一个变量
int k;
你可以使用它来获取它的类型
cout << typeid(k).name() << endl;
请看下面关于SO的帖子:类似的问题
#include <typeinfo>
...
string s = typeid(YourClass).name()
c++和Javascript的主要区别在于c++是静态类型的语言,而Javascript是动态的。
在动态类型语言中,变量可以包含任何东西,它的类型由它所持有的值决定。 在静态类型语言中,变量的类型是声明的,并且不能改变。
可以有动态分派、对象组合和子类型(继承和虚函数),也可以有静态分派和超类型(通过模板CRTP),但在任何情况下,编译器必须知道变量的类型。
如果你不知道它是什么或可能是什么,那是因为你设计了一些东西,因为语言有一个动态类型系统。
如果是这种情况,你最好重新考虑一下你的设计,因为它将进入一个对你所使用的语言来说不自然的领域(最像和毛毛虫一起在高速公路上行驶,或者和汽车一起在水里行驶)