如何返回一个可选的Boost.JSON对象?

编程语言 2026-07-10

我不确定这里的std::move是否有用,但我想避免不必要的拷贝;反正没有它,代码仍然编译不过。

#include <boost/optional.hpp>
#include <boost/json.hpp>
#include <iostream>

struct Response {
    int status; // Not used in this example
    boost::optional<boost::json::object> json;
};

Response func() {
    Response res;
    boost::json::object json;
    json["test"] = "func";
    res.json.value() = std::move(json);
    return res;
}

int main() {
    Response res = func();
    if (res.json)
        std::cout << boost::json::serialize(res.json.value()) << std::endl;
    return 1;
}

期望输出:

{"test":"func"}

运行时错误:

Terminating due to uncaught exception 0x3808fb01b000 of type boost::wrapexcept<boost::bad_optional_access>

解决方案

在这一行:

res.json.value() = std::move(json);

res.json 是一个空的 boost::optional,因此对它调用 .value() 是无效的。
在运行时错误中有一个提示,提到 "boost::bad_optional_access"

相反,你可以直接使用:

res.json = std::move(json);
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章