我怎样才能 return 字符数组与 boost::optional

How can I return char array with boost::optional

我尝试 return 简单数组 boost::optional

boost::optional<const char *> foo () {
   char ar[100] = {};
   return boost::make_optional(true, ar);
}

我收到以下错误:

could not convert ‘boost::make_optional(bool, const T&) [with T = char [100]](ar)’ from ‘boost::optional<char [100]>’ to ‘boost::optional<const char*>’ return boost::make_optional(true, ar);

我该如何处理这种困惑?

最接近的方法是使用具有值语义的包装器。

包装器是 std::array:

boost::optional<std::array<char, 100> > foo () {
   std::array<char, 100> ar {};
   return boost::make_optional(true, ar);
}

关于数组与指针:

  • How do I use arrays in C++?

boost::make_optionalar 推断为 char [100] 类型,但它期望 const char *。默认情况下,模板参数推导中不会发生隐式转换。

如果要使用原始指针,可以使用以下解决方案:

boost::optional<const char *> foo () {
    char ar[100] = {};
    return boost::make_optional(true, static_cast<const char *>(ar));
}

但在这种情况下,您会丢失有关此数组中有多少元素的信息,也许最好在 foo() 函数 std::vectorstd::array 中使用,例如 ]sehe

祝你好运!!