📅  最后修改于: 2023-12-03 15:29:53.101000             🧑  作者: Mango
在 C++ 中,我们可以用 typeid
关键字获取一个变量的数据类型。这个关键字定义在 <typeinfo>
头文件中。下面是一个示例:
#include <iostream>
#include <typeinfo>
int main() {
int a = 42;
std::cout << typeid(a).name() << std::endl;
return 0;
}
输出:
i
在这个例子中,typeid(a).name()
返回一个字符串,表示 a
的类型。上面的输出 "i"
表示 a
是一个整数类型 (int)。
我们也可以用 typeid
检查两个变量是否属于同一种类型。下面是一个示例:
#include <iostream>
#include <typeinfo>
int main() {
int a = 42;
double b = 3.14159;
std::cout << std::boolalpha << (typeid(a) == typeid(b)) << std::endl;
return 0;
}
输出:
false
在这个例子中,我们比较了 a
和 b
的数据类型。因为它们不是同一种类型,所以条件表达式的值为 false。
除了使用 typeid
,我们还可以使用 C++ 11 中引入的 decltype
关键字获取一个表达式的类型。下面是一个示例:
#include <iostream>
#include <typeinfo>
int main() {
int a = 42;
double b = 3.14159;
decltype(a + b) c = a + b;
std::cout << typeid(c).name() << std::endl;
return 0;
}
输出:
d
在这个例子中,我们使用了 decltype(a + b)
获取 a + b
表达式的类型,然后用这个类型定义了一个新的变量 c
。输出结果表明 c
的类型是双精度浮点类型 (double)。
注意,decltype
的返回值并不总是一样的:如果表达式是一个变量名,那么 decltype
返回这个变量的类型;如果表达式是一个函数调用,那么 decltype
返回函数的返回值类型;如果表达式是一个字面值或一个不完整的操作符,那么 decltype
的行为是未定义的。
总之,这里介绍了 C++ 中获取变量的数据类型的两种方法:typeid
和 decltype
。在需要识别变量类型的情况下,这两个关键字都非常有用。