C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > c++ std::Any

c++ std::Any 用法小结

作者:zh_xuan

本文演示了C++17中std::any的用法测试,示例代码展示了std::any可以存储多种类型值,通过any_cast进行类型安全的值提取,下面就来详细的介绍一下,感兴趣的可以了解一下

据说std::Any能存任意值,测试下:

Test1.h:

#pragma once

void testAny(void);

Test1.cpp:

#include "Test1.h"
#include <any>
#include <string>
#include <iostream>

void testAny(void) {
    std::any a = 9527;
    std::cout << "a: " << *(std::any_cast<int>(&a)) << std::endl;  // 这里转化为指针再解引用
    int b = std::any_cast<int>(a); // 直接值传递
    std::cout << "b: " << b << std::endl;
    std::any c = std::string("日月之行,若出其中;星汉灿烂,若出其里。");
    a = '\n';
    a = c;
    auto p = std::any_cast<std::string>(&a); // 为了取值,做类型转化, p是指针. 如果类型不匹配转化失败, p为nullptr
    std::cout << "a: " << *p << std::endl;

    if (a.has_value()) {
        std::cout << "a 类型: " <<  a.type().name() << std::endl;
    }

    a.reset();

    if (a.has_value()) {
        std::cout << "a 有值 "<< std::endl;
    } else {
        std::cout << "a 没有值了,释放了。 "<< std::endl;
    }

}

运行:

ok. 据说any不能存引用类型,其他都可以存。

到此这篇关于c++ std::Any 用法小结的文章就介绍到这了,更多相关c++ std::Any内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文