类型为<some anonymous lambda class> 的变量'comp' 可以设为静态,几乎与任何其他局部变量一样,即每次运行此函数时,它都是同一个变量,指向同一个内存地址)。
但是,请注意使用闭包,这将导致细微的错误(按值传递)或运行时错误(按引用传递),因为闭包对象也只初始化一次:
bool const custom_binary_search(std::vector<int> const& search_me, int search_value, int max)
{
static auto comp_only_initialized_the_first_time = [max](int const a, int const b)
{
return a < b && b < max;
};
auto max2 = max;
static auto comp_error_after_first_time = [&max2](int const a, int const b)
{
return a < b && b < max2;
};
bool incorrectAfterFirstCall = std::binary_search(std::begin(search_me), std::end(search_me), search_value, comp_only_initialized_the_first_time);
bool errorAfterFirstCall = std::binary_search(std::begin(search_me), std::end(search_me), search_value, comp_error_after_first_time);
return false; // does it really matter at this point ?
}
请注意,“max”参数只是用来引入您可能希望在比较器中捕获的变量,而“custom_binary_search”实现的功能可能不是很有用。