Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
c++怎么使用std::variant_c++ std::variant使用方法_创想鸟

c++怎么使用std::variant_c++ std::variant使用方法

c++kquote>std::variant是C++17引入的类型安全联合体,可存储多种类型之一,需包含头文件;声明时指定允许的类型列表,如std::variant v;赋值时自动选择对应类型;访问值需使用std::get(v)或std::get_if(&v)确保类型安全,前者类型不匹配会抛出std::bad_variant_access异常,后者返回指针便于安全检查;可用std::holds_alternative(v)判断当前是否为某类型,或用v.index()获取类型索引;结合std::visit可对不同类型的值统一处理,支持泛型lambda或函数对象实现多态调用;适用于配置解析、表达式求值等场景,需编译器支持C++17及以上标准。

c++怎么使用std::variant_c++ std::variant使用方法

在C++17中引入的std::variant是一个类型安全的联合体(union),可以保存多种类型中的某一种值。它解决了传统union类型不安全的问题,使用起来更可靠且易于管理。

基本用法

std::variant定义在头文件中。声明一个variant时,需要指定它可以容纳的类型列表。

#include
#include iostream>

例如,创建一个可以存储int、double或std::string的variant:

std::variant v;
v = 42; // 存int
v = 3.14; // 存double
v = “hello”; // 存string

访问variant中的值

不能直接解引用variant,必须通过正确方式获取其当前持有的值。

立即学习“C++免费学习笔记(深入)”;

1. 使用std::get

可以通过类型或索引来获取值,但必须确保类型匹配,否则会抛出std::bad_variant_access异常。

v = 3.14;
if (std::holds_alternative(v)) {
   double val = std::get(v);
   std::cout }

2. 使用std::get_if

返回指针,适合检查并安全访问值。

if (auto* p = std::get_if(&v)) {
   std::cout } else if (auto* p = std::get_if(&v)) {
   std::cout }

判断当前类型

使用std::holds_alternative检查当前存储的类型:

if (std::holds_alternative(v)) {
   std::cout }

也可以用v.index()获取当前类型的索引(从0开始):

switch (v.index()) {
   case 0: /* int */ break;
   case 1: /* double */ break;
   case 2: /* string */ break;
}

结合std::visit进行类型分发

最强大的功能是配合std::visit,实现对不同类型的统一处理。

std::visit([](const auto& value) {
   std::cout }, v);

也可以写成具名lambda或函数对象:

struct Printer {
   void operator()(int i) const { std::cout    void operator()(double d) const { std::cout    void operator()(const std::string& s) const { std::cout };

std::visit(Printer{}, v);

基本上就这些。std::variant让多类型值的安全管理变得简单,特别适合解析配置、表达式求值、状态机等场景。注意编译器需支持C++17及以上标准,并开启对应模式(如g++ -std=c++17)。

以上就是c++++怎么使用std::variant_c++ std::variant使用方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1477046.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
c++中宏定义#define怎么用_#define宏定义使用指南
上一篇 2025年12月19日 01:41:45
c++怎么链接一个静态库或动态库_c++库链接方法
下一篇 2025年12月19日 01:42:01

相关推荐

  • 夸克怎么更换账号登录_夸克App切换与更换账号方法

    夸克怎么更换账号登录_夸克App切换与更换账号方法夸克怎么更换账号登录_夸克App切换与更换账号方法夸克怎么更换账号登录_夸克App切换与更换账号方法夸克怎么更换账号登录_夸克App切换与更换账号方法

    1、可通过设置或个人中心切换账号,若需登录新账号则先退出当前账号再重新登录。 如果您在使用夸克App时需要登录其他账号,但当前账号未退出或未提供切换选项,则可能是由于操作路径不明确。以下是完成账号更换的具体步骤: 本文运行环境:iPhone 15 Pro,iOS 18 一、通过设置菜单切换账号 该方…

    2026年9月25日 • 用户投稿
    500
  • 为你分享电脑CPU的五大常见故障及解决方案

    为你分享电脑CPU的五大常见故障及解决方案为你分享电脑CPU的五大常见故障及解决方案为你分享电脑CPU的五大常见故障及解决方案为你分享电脑CPU的五大常见故障及解决方案

    cpu,即“中央处理器”,常被称为计算机的“大脑”。通常情况下,cpu本身极不容易发生故障,大多数问题往往源于用户在使用过程中的疏忽或不当操作。一旦电脑出现异常,很多人会慌乱无措,甚至误以为是严重硬件损坏,但实际上,许多看似复杂的cpu相关故障,其实都可以通过简单的排查自行解决。本文将为大家介绍五个…

    2026年9月25日 • 用户投稿
    000
  • 鸣潮2.6版本更新公告-鸣潮2.6版本更新内容一览

    鸣潮2.6版本更新公告-鸣潮2.6版本更新内容一览鸣潮2.6版本更新公告-鸣潮2.6版本更新内容一览鸣潮2.6版本更新公告-鸣潮2.6版本更新内容一览鸣潮2.6版本更新公告-鸣潮2.6版本更新内容一览

    鸣潮将于8月28日迎来2.6版本的更新,届时将带来全新区域、角色及多项精彩内容。以下是本次2.6版本的详细更新汇总。 鸣潮2.6版本更新公告【维护时间 & 补偿说明】 ✦ 更新维护时间:2025年8月28日 04:00 ~ 11:00(UTC+8) ✦ 更新补偿内容:星声×300、结晶溶剂×…

    2026年9月25日 • 用户投稿
    600
  • VSCode如何配置Dart开发环境 VSCode跨平台应用开发全攻略

    安装vscode并下载flutter sdk,将其bin目录添加到系统path环境变量;2. 在vscode中安装flutter扩展(自动包含dart扩展);3. 运行flutter doctor检查并修复环境配置问题,如android/ios工具链;4. 通过flutter create创建项目或…

    2026年9月25日
    100
  • 电脑要按f11才能进入系统怎么回事?电脑为什么按f11才进入系统

    电脑要按f11才能进入系统怎么回事?电脑为什么按f11才进入系统电脑要按f11才能进入系统怎么回事?电脑为什么按f11才进入系统电脑要按f11才能进入系统怎么回事?电脑为什么按f11才进入系统电脑要按f11才能进入系统怎么回事?电脑为什么按f11才进入系统

    最近有朋友向小编反映了一个关于电脑使用的问题:他的电脑在开机时无法直接进入系统,必须按下f11键后才能正常启动,对此感到十分困惑。接下来,小编就为大家解析一下为什么电脑需要按f11才能进入系统。 为何电脑需按F11才能进入系统? 这通常是由于BIOS中的启动设置出现偏差所致。例如,电脑本身并未配备软…

    2026年9月25日 • 用户投稿
    300
  • 主板对整机性能的影响究竟有多大?

    主板对整机性能的影响究竟有多大?主板对整机性能的影响究竟有多大?主板对整机性能的影响究竟有多大?主板对整机性能的影响究竟有多大?

    主板虽不直接提升性能,却决定硬件潜力发挥。其核心作用在于稳定供电、高效数据传输与良好散热,影响CPU、内存、显卡等部件的运行效率和系统稳定性。选择时应重点关注芯片组(如Z790、B650)、供电模块(VRM设计)、内存支持(类型、频率)及扩展接口(PCIe、M.2数量与版本)。预算有限时,主板投入应…

    2026年9月25日 • 用户投稿
    100
  • 快手如何加入快接单_快手加入快接单的条件与流程

    快手如何加入快接单_快手加入快接单的条件与流程快手如何加入快接单_快手加入快接单的条件与流程快手如何加入快接单_快手加入快接单的条件与流程快手如何加入快接单_快手加入快接单的条件与流程

    要开通快手快接单功能,需先满足粉丝门槛:加入工会者需超10万粉丝,未加入者需达30万以上。达标后通过创作者中心或服务列表查看入口,完善信息并等待审核,通过后可在任务广场浏览并承接广告任务,按时完成推广内容以实现变现。 如果您希望在快手平台通过发布广告内容实现收益变现,但发现无法找到或开通快接单功能,…

    2026年9月25日 • 用户投稿
    000
  • 夸克怎么设置字体大小_网页浏览字体调整方法

    夸克怎么设置字体大小_网页浏览字体调整方法夸克怎么设置字体大小_网页浏览字体调整方法夸克怎么设置字体大小_网页浏览字体调整方法夸克怎么设置字体大小_网页浏览字体调整方法

    1、打开夸克浏览器点击菜单进入设置,选择字体大小并拖动滑块调整至合适尺寸,网页将自动重绘;2、浏览时可用双指缩放手势临时调节当前页面字体大小;3、在手机系统设置中调整辅助功能里的字体大小,并在夸克中开启同步选项以实现全局一致阅读体验。 如果您在使用夸克浏览器时发现网页文字过小或过大,影响阅读体验,可…

    2026年9月25日 • 用户投稿
    100
  • 内有翘臀!速来!《海绵宝宝》新作预购开启

    内有翘臀!速来!《海绵宝宝》新作预购开启内有翘臀!速来!《海绵宝宝》新作预购开启内有翘臀!速来!《海绵宝宝》新作预购开启内有翘臀!速来!《海绵宝宝》新作预购开启

    3d平台跳跃游戏《海绵宝宝:潮汐巨神》(spongebob squarepants: titans of the tide)现已开放预购,预计将于11月18日正式发售,登陆ps5、xbox series x、switch 2以及pc平台。 预购特典 凡预购游戏的玩家均可获得“自然服装包”(Natur…

    2026年9月25日 • 用户投稿
    500
  • VSCode 怎样通过快捷键快速折叠所有代码块 VSCode 快速折叠所有代码块的快捷键方法​

    在vscode中一键折叠所有代码的快捷键是ctrl + k后按ctrl + 0(mac为cmd + k再按cmd + 0),该操作可将函数、类、条件语句等所有可折叠区域全部收起,帮助快速概览文件结构、提升阅读与定位效率;此外,还可使用ctrl + shift + [折叠当前代码块、ctrl + k,…

    2026年9月24日
    100
  • 如何通过BIOS设置优化游戏性能与系统稳定性?

    如何通过BIOS设置优化游戏性能与系统稳定性?如何通过BIOS设置优化游戏性能与系统稳定性?如何通过BIOS设置优化游戏性能与系统稳定性?如何通过BIOS设置优化游戏性能与系统稳定性?

    启用XMP/DOCP可显著提升游戏帧数与系统响应,通过让内存运行于标称高频低时序,改善最低帧稳定性;正确设置需在BIOS中开启对应配置文件,并进行稳定性测试以确保兼容性。 BIOS设置是优化游戏性能和系统稳定性的一个关键但常被忽视的环节。通过细致调整内存频率、CPU电源管理模式,甚至是集成显卡分配,…

    2026年9月24日 • 用户投稿
    200
  • 安装系统时,如何手动加载第三方 SATA 或 NVMe 硬盘驱动?

    安装系统时,如何手动加载第三方 SATA 或 NVMe 硬盘驱动?安装系统时,如何手动加载第三方 SATA 或 NVMe 硬盘驱动?安装系统时,如何手动加载第三方 SATA 或 NVMe 硬盘驱动?安装系统时,如何手动加载第三方 SATA 或 NVMe 硬盘驱动?

    安装系统时若第三方SATA或NVMe硬盘不被识别,需在安装界面通过“加载驱动程序”选项手动导入厂商提供的.inf等驱动文件,确保USB驱动器格式为FAT32并存放解压后的正确版本驱动,进入BIOS确认SATA模式(如RAID/AHCI)与驱动匹配,且硬件连接正常。 安装系统时,如果遇到第三方 SAT…

    2026年9月24日 • 用户投稿
    100
  • 《咩咩启示录》全新资料片 —— 羊绒仙境 将于 2026 年初发售!

    《咩咩启示录》全新资料片 —— 羊绒仙境 将于 2026 年初发售!《咩咩启示录》全新资料片 —— 羊绒仙境 将于 2026 年初发售!《咩咩启示录》全新资料片 —— 羊绒仙境 将于 2026 年初发售!《咩咩启示录》全新资料片 —— 羊绒仙境 将于 2026 年初发售!

    “羊绒仙境”是由 Massive Monster 联手 Devolver Digital 推出的畅销异教模拟游戏《咩咩启示录》的重磅新扩展包,销量已突破数百万份。 一位被遗忘的神明正从雪山深处向你发出召唤: 重建你的羊群,唤醒沉睡的寒冬,直面堕落羔羊背后的隐秘真相。 在这部内容丰富、规模宏大的资料片…

    2026年9月24日 • 用户投稿
    100
  • TPM模块在现代计算机安全中的作用是什么?

    TPM模块在现代计算机安全中的作用是什么?TPM模块在现代计算机安全中的作用是什么?TPM模块在现代计算机安全中的作用是什么?TPM模块在现代计算机安全中的作用是什么?

    TPM通过硬件级加密密钥存储和系统启动完整性验证保障安全。它在启动时逐层测量BIOS、引导程序、操作系统等组件的哈希值并记录于PCR寄存器,形成信任链;若任一环节被篡改,哈希值变化将触发安全响应。同时,TPM支持BitLocker全盘加密密钥保护、Windows Hello生物识别认证及FIDO身份…

    2026年9月24日 • 用户投稿
    100
  • win8安装autocad兼容性问题_Win8 AutoCAD兼容性修复

    win8安装autocad兼容性问题_Win8 AutoCAD兼容性修复win8安装autocad兼容性问题_Win8 AutoCAD兼容性修复win8安装autocad兼容性问题_Win8 AutoCAD兼容性修复win8安装autocad兼容性问题_Win8 AutoCAD兼容性修复

    首先设置兼容性模式并以管理员身份运行程序,再启用.NET Framework 3.5;具体为:右键安装文件→属性→兼容性→勾选“以兼容模式运行”并选择Windows 7或Vista→同时勾选“以管理员身份运行”→应用设置后重启电脑;若仍无法运行,则前往控制面板→程序和功能→启用或关闭Windows功…

    2026年9月24日 • 用户投稿
    200
  • win8系统怎么安装xp虚拟机_Win8 XP虚拟机安装方法

    win8系统怎么安装xp虚拟机_Win8 XP虚拟机安装方法win8系统怎么安装xp虚拟机_Win8 XP虚拟机安装方法win8系统怎么安装xp虚拟机_Win8 XP虚拟机安装方法win8系统怎么安装xp虚拟机_Win8 XP虚拟机安装方法

    首先启用CPU虚拟化功能,进入BIOS开启Intel VT-x或AMD-V;然后安装VMware Player或VirtualBox,创建自定义虚拟机并选择Windows XP系统类型,分配1024MB内存和至少20GB硬盘,设置硬盘控制器为IDE;接着加载XP ISO镜像启动安装,按提示分区并完成…

    2026年9月24日 • 用户投稿
    100
  • windows怎么安装visual c++运行库_visual c++运行库安装教程

    windows怎么安装visual c++运行库_visual c++运行库安装教程windows怎么安装visual c++运行库_visual c++运行库安装教程windows怎么安装visual c++运行库_visual c++运行库安装教程windows怎么安装visual c++运行库_visual c++运行库安装教程

    首先安装Visual C++运行库可解决“找不到vcruntime140.dll”问题,具体步骤包括:一、从微软官网下载对应系统版本的Visual C++ Redistributable安装包,推荐安装2015-2022版;二、可选使用可信的第三方VC++合集工具快速部署多版本运行库;三、通过Win…

    2026年9月24日 • 用户投稿
    100
  • x浏览器保存的密码在哪里查看_x浏览器已保存账号密码查看方法

    x浏览器保存的密码在哪里查看_x浏览器已保存账号密码查看方法x浏览器保存的密码在哪里查看_x浏览器已保存账号密码查看方法x浏览器保存的密码在哪里查看_x浏览器已保存账号密码查看方法x浏览器保存的密码在哪里查看_x浏览器已保存账号密码查看方法

    首先通过X浏览器设置进入密码管理,再选择具体网站查看账号密码。操作路径为:打开X浏览器→点击菜单→进入设置→选择安全及隐私→点击站点密码管理→找到目标网站→点击编辑→查看明文账号密码,全过程需通过设备验证。 如果您在使用X浏览器时启用了密码保存功能,但需要查看已存储的账号信息,则可以通过浏览器内置的…

    2026年9月24日 • 用户投稿
    000
  • 高效集成SOAP服务:Spring Boot中WSDL转Java的实践与策略

    高效集成SOAP服务:Spring Boot中WSDL转Java的实践与策略高效集成SOAP服务:Spring Boot中WSDL转Java的实践与策略高效集成SOAP服务:Spring Boot中WSDL转Java的实践与策略高效集成SOAP服务:Spring Boot中WSDL转Java的实践与策略

    本教程旨在指导开发者如何在Spring Boot项目中将WSDL(Web Services Description Language)文件转换为Java类,并成功消费SOAP(Simple Object Access Protocol)Web服务。文章将探讨常见的转换挑战,如wsimport兼容性问…

    2026年9月24日 • 用户投稿
    100
  • 主板的供电相数是不是越多越好?

    主板的供电相数是不是越多越好?主板的供电相数是不是越多越好?主板的供电相数是不是越多越好?主板的供电相数是不是越多越好?

    供电相数并非越多越好,需结合CPU需求和整体设计选择。多相供电可提升稳定性与散热,尤其适合高负载或超频场景,如i7、i9或Ryzen 7/9处理器;但实际效果取决于用料质量,包括MOSFET、电感、电容等级,PWM控制器性能及散热设计。部分主板通过倍相器虚标相数,实际供电能力不足。普通用户搭配i5或…

    2026年9月24日 • 用户投稿
    200

发表回复

登录后才能评论
关注微信