我有:
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;
}
Run Code Online (Sandbox Code Playgroud)
现在,在上面,"a + b + c + d"将导致3个临时DoubleVec的创建 - 是否有一种方法可以通过某种类型的模板魔术来优化它...即将其优化为某种东西相当于:
DoubleVec ans(a.size());
for(int i = 0; i < ans.size(); i++) …Run Code Online (Sandbox Code Playgroud) c++ ×1