考虑以下代码:
#include <iostream>
#include <algorithm>
#include <numeric>
int main()
{
const unsigned int size = 1000;
std::vector<int> v(size);
unsigned int cst = size/2;
std::iota(v.begin(), v.end(), 0);
std::random_shuffle(v.begin(), v.end());
std::cout<<std::find_if(v.begin(), v.end(), [&cst](const int& i){return i == cst;})-v.begin()<<std::endl;
std::cout<<std::find_if(v.begin(), v.end(), [=](const int& i){return i == cst;})-v.begin()<<std::endl;
return 0;
}
这段代码用值填充一个向量,对其进行洗牌,然后搜索指定值的索引(这只是一个例子来说明我的问题)。该值cst
可以通过引用或 lambda 函数中的值来捕获。
我的问题:两个版本之间的性能是否存在差异,或者编译器是否会以相同的方式对其进行优化?
通过值传递常量基本类型和通过引用传递常量类是一个好规则(就像在普通函数中一样)?