我用c ++编写了自己的Array类并重载了数组下标[]运算符,代码:
inline dtype &operator[](const size_t i) { return _data[i]; }
inline dtype operator[](const size_t i) const { return _data[i];}
其中_data是指向包含该数组的内存块的指针。分析表明,这个重载运算符单独占用总计算时间的10%(在长蒙特卡罗模拟中,我使用g ++进行最大优化编译)。这看起来很多,不知道为什么会这样吗?
编辑:dtype是double,而_data是指向double
数组的指针答案 0 :(得分:2)
const
的{{1}}重载实际上是返回副本而不是operator[]
。如果dtype很大,那么副本可能很昂贵。
原型设计可以解决这个问题:
dtype const &