我在这里看到了这一点: Move Constructor调用基类Move Constructor
有人能解释一下:
std::move和std::forward,优选用一些代码示例?我一直认为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) 这似乎是已经提出的最相关的问题.
什么是std :: move和std :: forward之间的区别
但每个答案都是不同的,并且适用并且说的略有不同.所以我很困惑.
我有以下情况.
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)