迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > 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 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 C++ 中通过掷骰子生成随机值

发布时间:2023/04/09 浏览次数:169 分类:C++

本文解释了如何使用时间因子方法和模拟 C++ 中的掷骰子的任意数方法生成随机数。了解它是如何工作的以及它包含哪些缺点。提供了一个 C++ 程序来演示伪数生成器。

在 C++ 中使用模板的链表

发布时间:2023/04/09 浏览次数:158 分类:C++

本文解释了使用模板在 C++ 中创建链表所涉及的各个步骤。工作程序演示了一个链表,该链表使用模板来避免在创建新变量时声明数据类型的需要。

在 C++ 中添加定时延迟

发布时间:2023/04/09 浏览次数:142 分类:C++

本教程将为你提供有关在 C++ 程序中添加定时延迟的简要指南。这可以使用 C++ 库为我们提供的一些函数以多种方式完成。

在 C++ 中创建查找表

发布时间:2023/04/09 浏览次数:155 分类:C++

本文重点介绍如何创建查找表及其在不同场景中的用途。提供了三个代码示例以使理解更容易,并附有代码片段以详细了解代码。

如何在 C++ 中把字符串转换为小写

发布时间:2023/04/09 浏览次数:63 分类:C++

介绍了如何将 C++ std::string 转换为小写的方法。当我们在考虑 C++ 中的字符串转换方法时,首先要问自己的是我的输入字符串有什么样的编码

如何在 C++ 中确定一个字符串是否是数字

发布时间:2023/04/09 浏览次数:163 分类:C++

本文介绍了如何检查给定的 C++ 字符串是否是数字。在我们深入研究之前,需要注意的是,以下方法只与单字节字符串和十进制整数兼容。

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便