相关疑难解决方法(0)

std :: move和std :: forward之间有什么区别

我在这里看到了这一点: Move Constructor调用基类Move Constructor

有人能解释一下:

  1. 之间的差std::movestd::forward,优选用一些代码示例?
  2. 如何轻松思考,何时使用哪个

c++ perfect-forwarding c++11

155
推荐指数
4
解决办法
4万
查看次数

使用std :: forward vs std :: move

我一直认为std::forward这只适用于模板参数.但是,我问自己为什么.请参阅以下示例:

void ImageView::setImage(const Image& image){
    _image = image;
}

void ImageView::setImage(Image&& image){
    _image = std::move(image);
}
Run Code Online (Sandbox Code Playgroud)

这两个功能基本上是一样的; 一个采用l值参考,另一个采用r值参考.现在,我认为,std::forward如果参数是l值引用,则应返回l值引用,如果参数为1,则应返回r值引用,此代码可简化为如下所示:

void ImageView::setImage(Image&& image){
    _image = std::forward(image);
}
Run Code Online (Sandbox Code Playgroud)

这类似于cplusplus.com提到的示例std::forward(只是没有任何模板参数).我想知道,如果这是正确与否,如果不是为什么.

我也问自己究竟会有什么区别

void ImageView::setImage(Image& image){
    _image = std::forward(image);
}
Run Code Online (Sandbox Code Playgroud)

c++ move forward c++11

53
推荐指数
3
解决办法
2万
查看次数

std :: move Vs std :: forward

这似乎是已经提出的最相关的问题.

什么是std :: move和std :: forward之间的区别

但每个答案都是不同的,并且适用并且说的略有不同.所以我很困惑.

我有以下情况.

  • 将项目复制到容器中
    复制项目是C++ 03所以我很清楚.
  • 将项
    构造到容器中将Construct项构造到容器中我认为正确使用完美转发通过两个函数将参数转发给T的构造函数emplaceBackInternal()(如果我错了,请另外说明).
  • 将项目移动到容器
    我的问题似乎是理解将项目移动到容器中.

代码:

template<typename T>
class Container
{
    std::size_t length;
    T*          buffer;

public:
    void push_back(T const& value)
    {
         resizeIfRequired();
         pushBackInternal(value);
    }
    template<typename... Args>
    void emplace_back(Args&&... args)
    {
         resizeIfRequired();
         emplaceBackInternal(std::forward<T>(arg)...);
    }
    void push_back(T&& value)
    {
         resizeIfRequired();
         // Is this forward correct or should it be move
         moveBackInternal(std::forward<T>(value));
    }
private:
    void pushBackInternal(T const& value)
    {
         // Copy construct object into buffer;
         new (buffer + length) T(value);
         ++length; …
Run Code Online (Sandbox Code Playgroud)

c++ move perfect-forwarding c++11

6
推荐指数
1
解决办法
1242
查看次数

标签 统计

c++ ×3

c++11 ×3

move ×2

perfect-forwarding ×2

forward ×1