【发布时间】:2010-12-24 16:51:46
【问题描述】:
我有:
struct DoubleVec {
std::vector<double> data;
};
DoubleVec operator+(const DoubleVec& lhs, const DoubleVec& rhs) {
DoubleVec ans(lhs.size());
for(int i = 0; i < lhs.size(); ++i) {
ans[i] = lhs[i]] + rhs[i]; // assume lhs.size() == rhs.size()
}
return ans;
}
DoubleVec someFunc(DoubleVec a, DoubleVec b, DoubleVec c, DoubleVec d) {
DoubleVec ans = a + b + c + d;
}
现在,在上面,“a + b + c + d”将导致创建 3 个临时 DoubleVec——有没有办法通过某种模板魔法来优化它......即优化它相当于:
DoubleVec ans(a.size());
for(int i = 0; i < ans.size(); i++) ans[i] = a[i] + b[i] + c[i] + d[i];
您可以假设所有 DoubleVec 具有相同的元素数。
高级的想法是在“+”上做一些模板化的魔法,它“延迟计算”直到=,此时它会查看自身,嗯......我只是添加这些数字,并合成 a[i] + b[i] + c[i] + d[i] ... 而不是所有的临时变量。
谢谢!
【问题讨论】:
-
由于 operator+ 的参数是 const 引用,智能编译器可能会自动执行此操作。你检查了吗?
-
对于这种特殊情况,最简单的做法是重载
operator+=并改用它。
标签: c++