类模板中的性能

时间:2017-02-24 14:49:25

标签: c++ performance templates

我有一个类模板,如下所示

template<class T>
class A
{
public:
    A(T t) : m_t(move(t)) {}
    operator T const&() const { return m_t; }        

private:
    T m_t;
};

Tint

(1)与没有移动相比,构造函数中的move是否有性能下降?

(2)与operator T const&()相比,operator T&()的性能下降了吗?

1 个答案:

答案 0 :(得分:0)

  1. 复制和移动和int是相同的,因为int存在于堆栈中并且没有远程部件。
  2. 考虑:

    struct A {
       int A;
    };
    
    struct B {
       std::string str;
    };
    

    对于A,复制和移动是相同的(复制int,嵌入)。对于B,复制是为字符串分配内存(通常)。但移动只是从字符串复制指向堆分配内存的指针,O(1)操作,也许是字符串的大小。一个字符串有远程部分,所以当你移动时只复制指针。

    1. 编译器非常擅长优化,我相信它会为int生成相同的代码,因为int不是多态的或可派生的(类)。