在 C++ 中优化 class 构造

optimizing class construction in c++

我有一个 class:

class A
{
    double a;
    map <int, double> b;
    public:
    A():a(0.0){}
    A(const double aa, const map <int, double> & bb): a(aa), b(bb){}
    A(double && aa, map <int, double> && bb):a(aa), b(bb) {} 
};

优化器 (VS2012) 显示行 A(a1*b1, std::move(bmap)) 占用了大部分时间。

我是否遗漏了一些可以加快对象构建速度的东西?我最近才开始学习移动构造函数,所以我不确定我的移动构造函数或它的使用是否最佳。

关于代码的更多信息: 我有

 A operator *( double in)
 {
  if(in !=0.0)
    {
     map<int, double> tmp(b); //second bottleneck
     for(auto & itr: tmp)
        tmp.second *= in;
     return A(in * a, std::move(tmp)); //first optimization bottleneck
    }
  return A();
 }

不确定这是否是您性能问题的罪魁祸首,但您实际上并没有将 tmp 移动到 A::b。您需要将 bb 移动到 A::b,因为 bb 是一个左值:

A(double && aa, map <int, double> && bb):a(aa), b(std::move(bb)) {} 
//                                                ^^^^^^^^^^^^^

这里有一个 minimal example on wandbox 说明了这个问题。