我如何 return 一个可选的指针或引用 ( std::optional )?

How do I return an optional pointer or reference ( std::optional )?

假设我有以下模板函数:

template <typename T>
std::optional<std::reference_wrapper<const T>> larger(const T data[], size_t count) {
    if(!count) return std::nullopt;

    size_t index_max {};
    for(size_t i {1ULL}; i < count; ++i)
        index_max = data[i] > data[index_max] ? i : index_max;

    return std::optional< std::reference_wrapper<const T> > {&data[index_max]};
}

我想做的是 return 一个可选的参考,但没有成功。我不确定如何从这里开始。这就是我想出的,最初我得到的是 std::optional<const T*> 作为 return 类型。

你有一个"typo",应该是(没有&):

return std::optional< std::reference_wrapper<const T> > {data[index_max]};

Demo

或者,当您指定 return 类型(对于 optional)时,您可以使用 std::cref:

return std::cref(data[index_max]);

Demo