迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C++ >

C++ 获取变量类型

作者:迹忆客 最近更新:2023/03/31 浏览次数:

本文将探讨在标准 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 运算符中传递的表达式是两种不同数据类型 intfloat 的乘积;因此,结果将被转换为更大的数据类型。


在 C++ 中使用 decltype() 说明符查找变量的类型

decltype(x) 说明符是在 C++11 中引入的。它是一个运算符,用于获取结果表达式的类型。

auto 关键字用于声明具有特定类型的变量,而 decltype 提取该变量类型。autodecltype 都基于类型推断,即自动推断数据类型。

让我们看一个使用 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

上例中变量 ab 的数据类型将与 function1function2 的返回类型相同。

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

然而,typeiddecltype 运算符之间的主要区别在于 typeid 在运行时提供有关类型的信息,而 decltype 在编译时提供类型信息。


结论

在本文中,我们讨论了如何在 C++ 中获取变量的类型。我们讨论了两种不同的方法;一种是使用 typeid(x).name(),它在运行时提供类型,而另一种是 decltype(x),它在编译时提供类型。

但是,这两种方法都有效且易于使用。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Arduino 中停止循环

发布时间:2024/03/13 浏览次数:444 分类:C++

可以使用 exit(0),无限循环和 Sleep_n0m1 库在 Arduino 中停止循环。

Arduino 复位

发布时间:2024/03/13 浏览次数:315 分类:C++

可以通过使用复位按钮,Softwarereset 库和 Adafruit SleepyDog 库来复位 Arduino。

Arduino 的字符转换为整型

发布时间:2024/03/13 浏览次数:181 分类:C++

可以使用简单的方法 toInt()函数和 Serial.parseInt()函数将 char 转换为 int。

Arduino 串口打印多个变量

发布时间:2024/03/13 浏览次数:381 分类:C++

可以使用 Serial.print()和 Serial.println()函数在串口监视器上显示变量值。

Arduino if 语句

发布时间:2024/03/13 浏览次数:123 分类:C++

可以使用 if 语句检查 Arduino 中的不同条件。

Arduino ICSP

发布时间:2024/03/13 浏览次数:214 分类:C++

ICSP 引脚用于两个 Arduino 之间的通信以及对 Arduino 引导加载程序进行编程。

使用 C++ 编程 Arduino

发布时间:2024/03/13 浏览次数:127 分类:C++

本教程将讨论使用 Arduino IDE 在 C++ 中对 Arduino 进行编程。

Arduino 中的子程序

发布时间:2024/03/13 浏览次数:168 分类:C++

可以通过在 Arduino 中声明函数来处理子程序。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便