如何在 C++ 中使用可以具有多种数据类型的单个变量

2023-12-07

一个变量怎么可以有两种数据类型?如果“月”是一个变量,它应该从 std::cin 的输入中获取。我应该怎么做才能让用户输入“January”这样的字符串或输入像 1 这样的整数?


在 C++ 17 中,我们得到了名为 std::variant 的东西,它基本上是一个类型安全的联合 要使用它,您只需声明您需要的类型:

std::variant<int, std::string> data;

data = "Hello!";
data = 13;
// No Compilation Issues

困难的部分是当您想要检索数据时

std::string& text = std::get<std::string>(data):
int& number = std::get<int>(data);

但请确保您定义的最后一个内容是您尝试检索含义的类型:

data = 13;
std::string& text = std::get<std::string>(data); // Bad Exception Error

更好的是使用 std::get_if

if (auto temp = std::get_if<std::string>(&data);
    std::string& text = *temp; // do what ever you want

我希望这能回答您的问题,祝您编码愉快!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C++ 中使用可以具有多种数据类型的单个变量 的相关文章

随机推荐

  • 设置独立于模型名称的种类名称(App Engine 数据存储区)

    作为一名 Python 程序员 我喜欢我的代码是可重用的 我试图避免代码中的种类名称冲突 其中两个不同的模型共享相同的种类名称 目前 我只是在模型的类名前面添加一些有意义的文本 但这非常不符合Python风格 能够显式设置模型的种类将解决我
  • 如何自动升级 Firebreath 插件

    最近 我使用 Firebreath 编写了一个跨浏览器插件 并为所有浏览器制作了一个安装程序 我在 stackoverflow 中搜索了自动插件安装 并找到了很多很好的答案 FireBreath插件自动安装 在网页上部署 Firebreat
  • 如何识别 html5 媒体元素已停止并等待进一步的媒体继续播放

    我正在与MediaSource and SourceBuffer播放 html5 视频 我按顺序获取 DASH 片段以继续不间断的视频播放 但有时 由于网络状况 SourceBuffer数据耗尽无法继续游戏 当该数据到达时 比赛将继续 但在
  • 使用 xslt 删除 xml 中的重复项

    我需要删除以下 xml 中的重复项
  • 在 C# 中序列化嵌套类?

    我想做的是序列化嵌套类 首先我的代码 Serializable public class SampleClass Serializable public class Person XmlElement Name public string
  • eval():无法分配给函数调用

    我的饼干答题器还有一个问题 这是我编写的产生错误的代码 cps cps bcps buych c c bprice buych eval buych eval buych 1 cps 是一个变量 c 是一个变量 b1 b2 b3 b4 b5
  • 如何从fragment中获取Toolbar?

    I have ActionBarActivity with NavigationDrawer并使用 support v7Toolbar作为动作栏 在我的片段之一中 工具栏有自定义视图 在其他片段中Toolbar应该显示标题 How get
  • ssh-add 创建连接到代理时出错:连接超时 (Windows 10)

    我正在尝试将 ssh 添加到 git 我已经生成了 ssh中有2个文件 在终端 MINGW64 中我输入 eval ssh agent s 它回应 Agent pid 3480 然后我输入 ssh add ssh id rsa 它响应 大约
  • 必须使用活动访问令牌在不同的 url 上查询有关当前用户的信息

    我正在开发托管在测试机上的 Facebook 应用程序 一切都很好 今天我想将其投入生产 我已经更改了 Facebook 开发人员的页面网址 从那一刻起 当我尝试使用此应用程序时 出现错误 An active access token mu
  • 将 NSTextField 的文本重置为空字符串 -- setText: 不起作用

    我有一个NSTextField 我需要一个按钮来重置字段的文本 我该怎么做呢 我一直在尝试这个 textBox setText textbox text 这不起作用 但我研究过 没有发现任何关于如何设置文本的信息 只找到如何获取文本 如果是
  • 如何保存YUV_420_888图像?

    我使用camera2 API 构建了自己的相机应用程序 我从样本开始 相机2Raw 并且我添加了 YUV 420 888 支持而不是 JPEG 但现在我想知道如何将图像保存在 ImageSaver 中 这是我的 run 方法的代码 Over
  • Tkinter - 画布滚动/滚动区域解释 - (非)限制区域

    它被带到我的注意力你不能用例如限制视图scrollregion 0 0 0 0 问题是为什么会这样 由于官方文档表明这应该有效并且不会抛出badRegion error 滚动区域 指定一个具有四个坐标的列表 描述左 上 矩形区域的右坐标和底
  • 从 JSON 字符串获取值

    我有以下 JSON 字符串 d Foo 7 Bar 5 Foobar 3 以及我的js文件中的相应调用 getJSON Foo svc GetSomeFoo function response alert response Foo aler
  • Swift - 发布构建崩溃,除非我关闭优化

    这是 XCode 6 2 上的 如果我在发布模式下运行应用程序 它会崩溃 但关闭优化后它不会崩溃 代码看起来很简单 我已经编程 ObjC 十多年了 所以对编程等并不陌生 我注意到 在 32 位中 它在发布模式 最快 O 下运行良好 但在 6
  • QTableWidgetItem 返回项目类型(pyqt)

    我正在使用 Qt 和 python 以及 pyqt 编写一个 QGIS 插件 在 QtDesigner 中 我有一个 QTableWidget 对象 如果有办法获取列项类型 我真的很挣扎 例如 在下表中 我输入一些用户可以编辑的默认参数 此
  • 如何调试 htaccess 重写脚本

    我想知道如何创建和调试这种脚本 如果您不习惯编写它们 像我一样 那么它可能会变得有点令人头痛 你使用工具来创建它们吗 有什么技巧可以调试正在发生的事情 而不是仅仅创建本地结构并查看浏览器中发生的情况 读者注意 旧答案不再有效 从版本 2 4
  • 在第一个“.”之前获取一个字符串与 PHP

    Lorem Ipsum 只是印刷和排版行业的虚拟文本 from Lorem Ipsum 只是印刷和排版行业的虚拟文本 自 1500 年代以来 Lorem Ipsum 一直是行业标准的虚拟文本 当时一位不知名的印刷商拿走了一堆字体并将其打乱以
  • 从列表中进行互斥随机抽样

    input beleriand mordor hithlum eol morgoth melian thingol 我在创建 X 个大小为 Y 的列表而不重复任何元素时遇到问题 我一直在做的是使用 x 3 y 2 import random
  • 在android上解密php加密数据

    An Android客户端 4 2 1 应用程序通过HttpPost请求给一个PHP 5 6 API 该 API 使用以下方式加密数据AES合规的RIJNDAEL 128 然后使用 OpenSSL 公共加密的客户端公钥对 AES 加密的密钥
  • 如何在 C++ 中使用可以具有多种数据类型的单个变量

    一个变量怎么可以有两种数据类型 如果 月 是一个变量 它应该从 std cin 的输入中获取 我应该怎么做才能让用户输入 January 这样的字符串或输入像 1 这样的整数 在 C 17 中 我们得到了名为 std variant 的东西