我无法弄清楚以下代码中的 std::move 是否有任何好处或完全错误?该类Object
定义了 Move 和 Copy 构造函数。
第一:随着移动:
template<typename T> template <typename F>
const Object<T> Object<T>::operator*(const F& rhs) const
{
return std::move(Object(*this) *= rhs); // We end in move constructor
}
第二:没有移动:
template<typename T> template <typename F>
const Object<T> Object<T>::operator*(const F& rhs) const
{
return Object(*this) *= rhs; // We end in copy constructor
}
*=
运算符定义为:
template<typename T> template<typename F>
Object<T>& Object<T>::operator*=(const F& rhs)
{
for(int i = 0; i < dimension ; i++)
{
_inner[i] *= rhs;
}
return *this;
}
这是我用来测试它的代码:
Object<double> test(4);
Object<double> test2(test * 4);
std::cout << test2; // works fine
结果 在第一种情况下,我们以移动构造函数结束,而在第二种情况下,我们以复制构造函数结束。
无论哪种情况,代码都会编译。
一个比另一个更有效,因为我认为将新对象移出而不是复制出来更快?
附加信息: 我使用以下编译器:g++ (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3