gpt4 book ai didi

c++ - 丢失的一元 std::copy 的最佳实现

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:08 40 4
gpt4 key购买 nike

C++11 引入了语义以避免不必要的对象复制,std::move 引入了语义,否则会发生复制。但是,现在也有一些情况需要拷贝,但默认情况下不需要。

例如,考虑一下 reverse 的这种简单实现。因为基于范围的 for 使用完美转发,所以在循环内修改容器相当于损坏。

auto out_iter = container.rbegin();
for ( auto value : container ) {
* out_iter ++ = value;
}

目标是使用

解决这个问题
for ( auto value : copy( container ) ) {

这看起来很简单……接受任何参数,获取底层类型并返回一个临时拷贝。

最佳答案

您正在计算的返回类型更为人所知的是 typename std::decay<T>::type .除此之外,使用 std::forward在体内获得完美转发的全部好处:

template<typename T>
typename std::decay<T>::type
val(T&& t)
{ return std::forward<T>(t); }

关于c++ - 丢失的一元 std::copy 的最佳实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7376482/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com