4

哪些 WG21 文档解释了在大多数标准库类中不包含引用限定符的决定?

一个可以从这种包含中受益的例子:

template <class C1, class C2>
C1 container_cast(C2&& source)
{
    C1 dest;
    // if constexpr(can do so) dest.reserve(source.size());
    for(auto&& element : std::forward<C2>(source))
    {
        dest.emplace_back(std::forward<decltype(element)>(element));
    }
    return dest;
}

但是,没有任何访问容器成员的方法会将右值传播给它们,从而导致不必要的副本。这与例如 std::get(std::tuple) 和 std::optional::operator * 形成对比,后者确实提供了各种重载,包括矛盾的“const &&”。

(与STL 容器的右值引用限定符密切相关,但问题更具体。)

4

0 回答 0