【发布时间】:2013-10-15 08:10:35
【问题描述】:
假设我有一个二分搜索函数,它初始化并使用一个 lambda:
bool custom_binary_search(std::vector<int> const& search_me)
{
auto comp = [](int const a, int const b)
{
return a < b;
};
return std::binary_search(search_me.begin(), search_me.end(), comp);
}
没有指出这完全是多余的,只关注 lambda;每次都声明和定义该 lambda 对象是否昂贵?它应该是静态的吗? lambda 是静态的意味着什么?
【问题讨论】:
-
您不能将 lambda 表达式 声明为静态。您只能将 变量
comp声明为静态。在这种情况下,它与任何变量的含义相同。 -
@KerrekSB 我不明白;如果我将 lambda 对象声明为静态,这会改变什么吗?该函数还能像以前一样采用本地参数吗?它会减少每次我的函数运行时重新声明变量的需要吗?
-
正如我所说,你只能声明变量为静态,即
static auto comp = ...。然后当控制流第一次通过声明时,它将被精确地初始化一次。由于 lambda 是无状态的,所以它根本不应该有任何区别。即使是现在的编写方式,它也可能不会生成任何代码。 -
人们通常不是“每次都声明和定义一个 lambda 对象”,而是将其设为一个简单的非成员函数 (free function) 并将其与算法一起使用。这也应该解决在头文件中只声明一次并在某些代码文件中定义一次的问题。