c++ - 使用三元运算符初始化 boost::optional

标签 c++ c++11 boost option-type

是一种初始化可选的方式,比如:

bool conditional = true;
boost::optional<int> opt = conditional ? 5 : boost::none;

为什么会出现错误?:

main.cpp:31:31: error: operands to ?: have different types ‘int’ and ‘const boost::none_t’
boost::make_optional(cond ? 5 : boost::none);
      |                          ~~~~~^~~~~~~~~~~~~~~~~

使用简单的 if else 我可以做到这一点:

boost::optional<int> opt;
if (cond)
    opt = 5;
else
    opt = boost::none;

最佳答案

三元运算符要求左右为相同(或可转换)类型。 none_tint不是同一类型。你可以做cond ? boost::optional<int>(5) : boost:none

我不使用 boost,所以只是根据 std::optional 猜测语法,但以下确实有效:

std::optional<int> opt = cond ? std::optional<int>(5) : std::nullopt;

关于c++ - 使用三元运算符初始化 boost::optional,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66990956/

相关文章:

c++ - boost::thread 在程序启动之前挂起?

c++ - 这段 C++ 代码是什么意思?

c++ - 为什么有变异的 Boost.Range 算法的 const 重载?

c++ - 可能返回值也可能不返回值的函数的 Iterator-reducer 模式

c++ - C++0x 中的类型别名是否有替代方案?

c++ - 读/写 unicode c++

c++ - 将 using 语句应用于函数的返回类型,而不应用于整个命名空间

c++ - 等待 boost asio 的 future 在 io_service.stop() 之后永远持续

c++ - 将 boost::stream 用于比字符更复杂/结构化的类型?

c++ - 如何正确使用 boost::timed_mutex 和 scoped_lock