【发布时间】:2016-09-07 00:08:38
【问题描述】:
我有一些使用 lambda 表达式的代码:
#include <vector>
#include <algorithm>
int main(){
std::vector<int> vi={3,1};
std::sort(vi.begin(),vi.end(),[](int x,int y){
return x<y;
});
return 0;
}
编译不需要#include< functional>,但是如果我使用变量来存储lambda函数:
#include <vector>
#include <algorithm>
#include <functional>
int main(){
std::vector<int> vi={3,1};
std::function<void()> compf=[](int x,int y){
return x<y;
};
std::sort(vi.begin(),vi.end(),compf);
return 0;
}
那我需要包含<functional> 来编译,为什么?为什么sort() 还没有包含<functional>?
【问题讨论】:
-
您是否认为 lambda 是 std::function?它不是;当您将其存储到
compf时,会涉及到转换。 -
因为 lambda 表达式是语言的一部分。
std::function是标准库的一部分,因此需要包含头文件。 -
@PaulRooney,公平地说,
for (int i : {1, 2, 3})还需要包含标头,尽管没有明确使用标准库。 -
@chris true。我总觉得这有点奇怪。