gpt4 book ai didi

c++ - 按值传递和 move ,或两种方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:50:41 24 4
gpt4 key购买 nike

假设我有以下类,它有一个方法 set_value。哪种实现方式更好?

class S {
public:
// a set_value method

private:
Some_type value;
};

按值传递,然后 move

void S::set_value(Some_type value)
{
this->value = std::move(value);
}

定义两个重载方法

void S::set_value(const Some_type& value)
{
this->value = value;
}

void S::set_value(Some_type&& value)
{
this->value = std::move(value);
}

第一种方法只需要定义一个方法,而第二种方法需要两个。

然而,第一种方法似乎效率较低:

  1. 根据传递的参数复制/move 参数的构造函数
  2. move 作业
  3. 参数的析构函数

而对于第二种方法,只执行一次赋值操作。

  1. 根据调用的重载方法复制/move 赋值

那么,哪种实现方式更好呢?还是根本不重要?

还有一个问题:下面的代码是否等同于第二种方法中的两个重载方法?

template <class T>
void S::set_value(T&& value)
{
this->value = std::forward<T>(value);
}

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