首页 > 编程语言 >c++基本介绍——std::holds_alternative()的基本介绍

c++基本介绍——std::holds_alternative()的基本介绍

时间:2024-10-09 20:23:17浏览次数:11  
标签:std 检查 holds variant c++ 类型 alternative

今天的工作中开发一个新功能,涉及到判断std::variant类型是否等于某个特定的值。就此机会学习一下,std::variant类型和调用std::holds_alternative进行持有值的检查。

std::holds_alternative 是 C++17 中引入的标准库函数,用于检查 std::variant 是否持有特定类型的值。它返回一个布尔值,指示 variant 中是否存储了指定的类型。
std::holds_alternative 仅用于检查类型,不会修改 variant 的内容。适合在使用 std::get 之前进行类型检查,以避免抛出异常。

1. 语法

#include <variant>

template <typename T, typename... Types>
constexpr bool holds_alternative(const std::variant<Types...>& v) noexcept;
  • 参数:
    • T: 要检查的类型。
    • v: 要检查的 std::variant 对象的引用。
  • 返回值:
    • 如果 v 当前持有类型 T,返回 true;否则返回 false。

2. 示例

以下是 std::holds_alternative 的基本用法示例:

#include <variant>
#include <iostream>
#include <string>

int main() {
    std::variant<int, std::string> var = "Hello";

    // 检查 var 是否持有 std::string 类型
    if (std::holds_alternative<std::string>(var)) {
        std::cout << "Variant holds a string: " << std::get<std::string>(var) << std::endl;
    } else {
        std::cout << "Variant does not hold a string." << std::endl;
    }

    // 检查 var 是否持有 int 类型
    if (std::holds_alternative<int>(var)) {
        std::cout << "Variant holds an int." << std::endl;
    } else {
        std::cout << "Variant does not hold an int." << std::endl;
    }

    return 0;
}

3. 注意事项

std::holds_alternative 仅用于检查类型,不会修改 variant 的内容。
适合在使用 std::get 之前进行类型检查,以避免抛出异常。

4. 总结

std::holds_alternative 是一个方便的工具,允许开发者在访问 std::variant 中的值之前,安全地检查其类型,增强代码的健壮性和可读性。

标签:std,检查,holds,variant,c++,类型,alternative
From: https://blog.csdn.net/XWWW668899/article/details/142793996

相关文章

  • 实验1 现代C++编程初体验
    task1:1//现代C++标准库、算法库体验2//本例用到以下内容:3//1.字符串string,动态数组容器类vector、迭代器4//2.算法库:反转元素次序、旋转元素5//3.函数模板、const引用作为形参67#include<iostream>8#include<string>9#includ......
  • 实验1 现代C++编程初体验
    任务一源代码1#include<iostream>2#include<string>3#include<vector>4#include<algorithm>56usingnamespacestd;78template<typenameT>9voidoutput(constT&c);1011voidtest1();12voidtest2();13v......
  • 合并、删除区间算法C++代码
    #include<algorithm>#include<iostream>#include<vector>usingnamespacestd;classSolution{public:constintCOMBINE_INT=0;//1表示整数点区间,比如[1:3]和[4:5]会合并为[1:5],0则仅会合并[1:3]和[3:4]这类的区间。vector<pair<int,int>>......
  • 实验1 现代C++编程初体验
    1.实验任务11#include<iostream>2#include<string>3#include<vector>4#include<algorithm>56usingnamespacestd;78//声明9//模板函数声明10template<typenameT>11voidoutput(constT&c);1213//普通函数声明......
  • C++模板与容器
    目录一、 模板1.函数模板2.类模板二、容器1.标准模板库STL2.概念3顺序容器3.1array数组2.3.2vector向量3.3list列表 3.4deque队列4关联容器5迭代器遍历一、 模板        模板可以让类或者函数支持一种通用类型,这种通用数据类型在实......
  • 关于C++中的异常概念理解
    1.基本概念异常,即exception,是C++中的基本概念之一,在某段程序发生无法继续正常执行的情况时,C++允许程序进行所谓抛出异常(有时也被称为吐出异常)的行为,这些被抛出的异常,会自动地从触发点开始向外传播,直到被捕获(有时也被称为吞下异常)或者程序终止。2.语法2.1抛出异常下面用一......
  • C++名字空间
    基本概念名字空间本质上是自定义作用域,由于C++设计的初衷是开发大规模软件,大量的软件库必然会加剧全局符号(变量、函数)的冲突,因此名字空间最基本的作用就是给不同的库和模块拥有自己的独特的作用域,处于不同名字空间中的重名符号相安无事,互不冲突,以此来大大提高编程的便利性。1.1......
  • C++:自治我的世界2D.V0.0.4.5
    更新内容:增加挖掘进度,挖掘需要时间了,但还有BUG操作说明:A,D移动;W跳跃;上,下,右+上,右+下,左+上,左+下撸方块;M开关大地图#include<bits/stdc++.h>#include<windows.h>#defineKEY_DOWN(VK_NONAME)((GetAsyncKeyState(VK_NONAME)&0x8000)?1:0)usingnamespacestd;void......
  • C++消灭星星游戏编程【目录】
    欢迎来到zhooyu的专栏。主页:【zhooyu】专栏:【C++消灭星星游戏编程】特色:【保姆级教程,含每一课程源码】致力于用最简洁的语言,最简单的方式,最易懂的知识,带大家享受编程的快乐。消灭星星游戏编程演示效果消灭星星游戏编程演示效果本专栏内容:消灭星星的小游戏保姆......
  • 实验一 C++
    实验任务1:task1.cpp:1#include<iostream>2#include<string>3#include<vector>4#include<algorithm>56usingnamespacestd;78//声明9//模板函数声明10template<typenameT>11voidoutput(constT&c);1213......