我有一个类模板,如下所示
template<class T>
class A
{
public:
A(T t) : m_t(move(t)) {}
operator T const&() const { return m_t; }
private:
T m_t;
};
当T
为int
(1)与没有移动相比,构造函数中的move
是否有性能下降?
(2)与operator T const&()
相比,operator T&()
的性能下降了吗?
答案 0 :(得分:0)
考虑:
struct A {
int A;
};
struct B {
std::string str;
};
对于A,复制和移动是相同的(复制int,嵌入)。对于B,复制是为字符串分配内存(通常)。但移动只是从字符串复制指向堆分配内存的指针,O(1)操作,也许是字符串的大小。一个字符串有远程部分,所以当你移动时只复制指针。