You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用boost::blank为int、double设置空值并判断空状态

boost::blank 用法与可空数值实现示例

boost::blank本身是一个无状态的空标签类型,不能直接给原生int、double附加空状态,需要搭配boost::variant组成联合类型,才能实现「值为空/持有具体数值」两种状态的切换。

前置依赖

使用时需要引入的头文件:

#include <boost/variant.hpp>
#include <boost/blank.hpp>
#include <iostream>

可空数值的定义与基础操作示例

int main() {
    // 定义可空int、可空double类型
    using NullableInt = boost::variant<boost::blank, int>;
    using NullableDouble = boost::variant<boost::blank, double>;

    // 1. 初始化空值:默认构造的variant默认持有boost::blank,代表空状态
    NullableInt num1;
    NullableDouble score1;

    // 2. 判断是否为空
    if (boost::get<boost::blank>(&num1)) {
        std::cout << "num1当前是空值" << std::endl;
    }
    if (boost::get<boost::blank>(&score1)) {
        std::cout << "score1当前是空值" << std::endl;
    }

    // 3. 赋值为具体数值
    num1 = 1024;
    score1 = 99.5;

    // 4. 赋值后再次判空、取值
    if (!boost::get<boost::blank>(&num1)) {
        // 非空时可以安全取具体值
        std::cout << "num1的具体值为:" << boost::get<int>(num1) << std::endl;
    }
    if (!boost::get<boost::blank>(&score1)) {
        std::cout << "score1的具体值为:" << boost::get<double>(score1) << std::endl;
    }

    // 5. 重新设置为空值
    num1 = boost::blank();
    if (boost::get<boost::blank>(&num1)) {
        std::cout << "num1已被重置为空值" << std::endl;
    }

    return 0;
}

运行输出结果

num1当前是空值
score1当前是空值
num1的具体值为:1024
score1的具体值为:99.5
num1已被重置为空值

注意事项

  • 取值前必须先做判空校验,直接调用boost::get<int>(空状态的variant)会抛出boost::bad_get异常
  • 如果使用C++17及以上版本,也可以用标准库的std::variant + 自定义空标签类实现完全相同的效果,逻辑和上述示例一致

内容的提问来源于stack exchange,提问作者Meng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:54:07