c++ variant用法 variant是联合体相当于c语言的union 测试下void testVariant(void) { // 测试下variant // 声明一个可以存储 int、double 或 std::string 的 variant std::variantint, double, std::string v; // variant 默认会初始化为第一个类型int的默认值0 std::cout 默认值: std::getint(v) std::endl; // 赋值类型切换 v 1314520; // 当前存储 int v 3.14; // 当前存储 double v 心乱则音噪心静则音纯。心慌则音误心泰则音清。听诸葛亮弹琴如观其肺腑也我能为诸葛亮知音不胜荣幸。; // 当前存储 std::string // 检查当前持有的类型 if (std::holds_alternativestd::string(v)) { std::cout 当前类型是字符串: std::getstd::string(v) std::endl; } // 异常处理如果类型不匹配std::get 会抛出异常 try { std::cout std::getint(v) std::endl; // 当前是 string强转 int 会报错 } catch (const std::bad_variant_access e) { std::cout 捕获异常: 当前 variant 中不存储 int 类型error: e.what() std::endl; } // 最推荐的访问方式std::visit (访问者模式) // 无论当前是什么类型都能安全处理 std::visit([](auto arg) { std::cout 当前类型是: typeid(arg).name() std::endl; std::cout 当前值: arg std::endl; }, v); // 或者这样 std::visit([](auto arg) { using T std::decay_tdecltype(arg); // 获取 arg 的实际类型 if constexpr (std::is_same_vT, int) { std::cout 收到整数: arg std::endl; } else if constexpr (std::is_same_vT, double) { std::cout 收到浮点数: arg std::endl; } else if constexpr (std::is_same_vT, std::string) { std::cout 收到字符串: arg std::endl; } }, v); }运行ok.

相关新闻

最新新闻

从瑞德克斯隐私保护表达来看,够不够稳妥?

从瑞德克斯隐私保护表达来看,够不够稳妥?

把账户提醒会更安心吗放进真实使用情境里观察,瑞德克斯是否重视基础体验就会更有条理。用户在这些位置看到的是层次分明的提示、适度的提醒和比较顺畅的反馈节奏。把问题拆开去看,平台在基础服务、说明完整度和提醒意识上的表现就更容易被感知。用户对透…

2026/7/9 3:06:19
USB-Blaster 驱动安装 3 种方法:从常规到禁用签名的完整排错流程

USB-Blaster 驱动安装 3 种方法:从常规到禁用签名的完整排错流程

USB-Blaster 驱动安装全攻略:从基础操作到疑难排错引言在FPGA开发的世界里,USB-Blaster下载器就像一把打开硬件编程大门的钥匙。然而,这把钥匙有时会变得"生锈"——当Windows系统拒绝识别它时,新手工程师往往会陷入困境…

2026/7/9 3:06:19
别再拿肝换流量了!短视频“暴力搞钱”的底层逻辑

别再拿肝换流量了!短视频“暴力搞钱”的底层逻辑

兄弟们,现在做短视频搞收益,还在靠“人肉战术”一个个去点赞评论?太老实了!这年头,拼体力早就拼不过拼脑力的。真正闷声发大财的同行,早就把这套“技术运营”的搞收益闭环玩明白了! 为了让这套…

2026/7/9 3:06:19
Airtest自动化测试第三篇:Poco控件识别——精准定位UI元素的进阶武器

Airtest自动化测试第三篇:Poco控件识别——精准定位UI元素的进阶武器

上一篇我们学会了图像识别脚本编写,本篇进入Airtest的第二大核心能力——Poco控件识别。如果说图像识别是"用眼睛看",那Poco就是"用探针刺入APP内部",直接读取UI树结构,稳定性和效率远超图像识别。一、Poco是…

2026/7/9 3:06:19
Linux telinit 命令详解:运行级别切换|关机重启|系统维护一站式掌握

Linux telinit 命令详解:运行级别切换|关机重启|系统维护一站式掌握

1. 命令简介 telinit 命令用于切换当前正在运行的 Linux 系统的运行等级(runlevel)。它是系统初始化进程 init(传统 sysvinit)或现代系统中 systemd 的一个接口,通过向 init 进程发送信号来改变系统的运行状态。该命令…

2026/7/9 3:06:19
【199管理类联考】写作(第一轮复习)

【199管理类联考】写作(第一轮复习)

概述 文体:评论型文体题型: 论证有效性分析(一个多段构成的材料,提供了多个论证,找出有缺陷的论证、进行反驳,不需要提出自己观点)针对“推出过程”质疑,考察分析论证能力论说文&…

2026/7/9 3:01:18

月新闻