C++ 获取变量类型
本文将探讨在标准 C++ 中查找变量数据类型的不同方法。
C++ 获取变量类型
在某些情况下,我们需要在 C++ 中查找变量的动态类型或运行时的类型。因此,C++ 库为我们提供了不同的方法来查找变量的类型。
其中一种方法是使用 C++ 的 <typeinfo>
库中的 typeid
运算符。但是,另一种已在 C++11 中引入,称为 decltype(x)
,它将表达式转换为生成的结果的类型。
在旧版本的 C++ 中,每种数据类型都必须在编译时显式声明;但是,在较新的版本中,有一种工具可以自动推断表达式中的数据类型,这称为类型推断。decltype()
运算符还提供了自动推导表达式中数据类型的功能。
但是,我们将在本文中详细讨论每种方法。
在 C++ 中使用 typeid
运算符查找变量的类型
typeid
运算符存在于 C++ 的 <typeinfo>
库中,用于查找运行时提供的变量类型。但是,用于查找变量类型的完整函数是 typeid(x).name()
,其中 x
是应该找到其类型的变量。
使用的 name()
成员函数返回标识变量类型的字符序列。
但是,它将返回数据类型的首字母作为输出。例如,对于 int
,它将返回 i
,对于 float``f
,对于 double
,它将返回 d
作为类型。
让我们看看在 C++ 中使用 typeid
运算符来查找变量类型的代码。
#include <iostream>
#include <typeinfo>
using namespace std;
int main() {
int x = 200;
float y = 200.790;
cout << typeid(x).name() << endl;
cout << typeid(y).name() << endl;
cout << typeid(x * y).name() << endl;
return 0;
}
输出:
i
f
f
上面的输出显示 i
指的是 integer
类型,而 f
指的是 float
类型。此外,C++ 中的 typeid
也用于返回表达式的类型。
在上面的例子中,在 typeid
运算符中传递的表达式是两种不同数据类型 int
和 float
的乘积;因此,结果将被转换为更大的数据类型。
在 C++ 中使用 decltype()
说明符查找变量的类型
decltype(x)
说明符是在 C++11 中引入的。它是一个运算符,用于获取结果表达式的类型。
auto
关键字用于声明具有特定类型的变量,而 decltype
提取该变量类型。auto
和 decltype
都基于类型推断,即自动推断数据类型。
让我们看一个使用 decltype
运算符在 C++ 中查找变量类型的示例。
#include <bits/stdc++.h>
#include <cstring>
using namespace std;
float function1() { return 4.5; }
int function2() { return 34; }
int main() {
decltype(function1()) a;
decltype(function2()) b;
cout << typeid(a).name() << endl;
cout << typeid(b).name() << endl;
return 0;
}
输出:
f
i
上例中变量 a
和 b
的数据类型将与 function1
和 function2
的返回类型相同。
decltype
运算符的另一个示例如下,它提取 C++ 中表达式的类型。
#include <bits/stdc++.h>
using namespace std;
int main() {
float ft = 4.8;
decltype(ft) a = ft + 9.8;
cout << typeid(a).name();
return 0;
}
输出:
f
输出 f
指的是 float
数据类型。因此,添加表达式 ft+9.8
后,结果数据类型将是 float
。
然而,typeid
和 decltype
运算符之间的主要区别在于 typeid
在运行时提供有关类型的信息,而 decltype
在编译时提供类型信息。
结论
在本文中,我们讨论了如何在 C++ 中获取变量的类型。我们讨论了两种不同的方法;一种是使用 typeid(x).name()
,它在运行时提供类型,而另一种是 decltype(x)
,它在编译时提供类型。
但是,这两种方法都有效且易于使用。