【发布时间】:2015-08-26 01:32:06
【问题描述】:
在 1:15:26 在this talk by Sutter 中,出现了如下代码,
class employee{
std::string name_;
public:
template<class String, class=
std::enable_if_t< !std::is_same<std::decay_t<String>, std::string>::value > >
void set_name(String && name)
noexcept(std::isnothrow_assignable<std::string &, String>::value)
{
name_ = std::forward<String>(name);
}
}
我知道std::forward 是如何工作的,如果name 是一个左值,name_ 将得到副本构造;如果name 是右值,name_ 将被构造移动。但是在幻灯片中它还说Optimized to steal from rvalues (and more),还有什么?
后来它显示这段代码似乎是所有四个实现中最快的,尤其是对于char *,任何人都有耐心浏览这段代码并解释还有什么正在优化以及为什么它是最快的,特别是在char *的情况?
【问题讨论】:
-
注意他所比较的函数以一种或另一种形式采用
std::string。如果您的目标只是为char *编写快速的代码,那么您没有必须使用完美转发。