作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个函数可以通过 const
引用转发一些大变量,如下所示:
void processMore(const std::vector<int> &a, const std::vector<int> &b);
void process(const std::vector<int> &a,
const std::vector<int> &b) {
processMore(a, b);
}
但是我添加了修改它们的优化:
std::pair<std::vector<int>, std::vector<int>>
optimise(const std::vector<int> &a, const std::vector<int> &b);
我可以无条件地这样做:
void process(const std::vector<int> &a,
const std::vector<int> &b) {
auto opt = optimise(a, b);
processMore(opt.first, opt.second);
}
但我想让它成为可选的。我的解决方案是这样的:
void process(const std::vector<int> &a,
const std::vector<int> &b,
bool doOptimisation) {
auto opt =
[&]() -> std::pair<const std::vector<int>&,
const std::vector<int>&> {
if (doOptimisation) {
auto o = optimise(a, b);
return std::make_pair(o.first, o.second);
}
return std::make_pair(a, b);
}();
processMore(opt.first, opt.second);
}
这似乎有点令人费解。有没有更好的办法?我想避免不必要的复制。
最佳答案
“天真的”解决方案是这样的
if (doOptimisation)
{
auto o = optimise(a, b);
processMore(o.first, o.second);
}
else
{
processMore(a, b);
}
没有进行额外的复制。
关于C++ 对现有或新变量的条件引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55705049/
我是一名优秀的程序员,十分优秀!