Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c++ variant

作者:我愿等你贰年〃   发布日期:2026-02-20   浏览:101

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

// 定义一个 variant 类型,它可以存储 int, double 或 std::string
using MyVariant = std::variant<int, double, std::string>;

int main() {
    // 创建一个 variant 变量并初始化为 int 类型
    MyVariant v1 = 42;

    // 使用 std::get 访问 variant 中的值
    if (v1.index() == 0) { // 检查是否是 int 类型
        std::cout << "v1 contains an int: " << std::get<int>(v1) << '\n';
    }

    // 修改 variant 的内容为 double 类型
    v1 = 3.14;

    // 使用 std::visit 访问 variant 中的值
    std::visit([](auto&& arg) {
        using T = std::decay_t<decltype(arg)>; // 获取参数的实际类型
        if constexpr (std::is_same_v<T, int>) {
            std::cout << "v1 contains an int: " << arg << '\n';
        } else if constexpr (std::is_same_v<T, double>) {
            std::cout << "v1 contains a double: " << arg << '\n';
        } else if constexpr (std::is_same_v<T, std::string>) {
            std::cout << "v1 contains a string: " << arg << '\n';
        }
    }, v1);

    // 修改 variant 的内容为 std::string 类型
    v1 = std::string("Hello, World!");

    // 再次使用 std::visit 访问 variant 中的值
    std::visit([](auto&& arg) {
        using T = std::decay_t<decltype(arg)>; // 获取参数的实际类型
        if constexpr (std::is_same_v<T, int>) {
            std::cout << "v1 contains an int: " << arg << '\n';
        } else if constexpr (std::is_same_v<T, double>) {
            std::cout << "v1 contains a double: " << arg << '\n';
        } else if constexpr (std::is_same_v<T, std::string>) {
            std::cout << "v1 contains a string: " << arg << '\n';
        }
    }, v1);

    return 0;
}

解释说明:

  • std::variant 是 C++17 引入的一个类型安全的联合体(union),它可以存储多种不同类型的值。
  • 在这个例子中,我们定义了一个 MyVariant 类型,它可以存储 int, doublestd::string
  • 我们使用 std::get 来访问 variant 中的值,但需要先检查当前存储的是哪种类型。
  • 更推荐的方式是使用 std::visit,它可以通过模板和 lambda 表达式来处理 variant 中的不同类型。
  • std::visit 允许我们编写更简洁和类型安全的代码,而不需要显式地进行类型检查。

上一篇:c++ algorithm库

下一篇:c++定义字符串

大家都在看

c++闭包

c++单引号和双引号的区别

c++ 注释

c++如何判断素数

c++框架代码

c++格式化字符串

c++ orm框架

c++ find_if

c++ random函数用法

队列c++

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站