在c++中定义了一个谓词函数:compare,用在sort函数中。但如果我将compare写在主函数中,在编译阶段编译器(我用的是VS2010)会报错,提示
error C2601: “compare”: 本地函数定义是非法的。
将函数定义在外部就运行正常。
想问一下这是为什么。谓词函数必须在主函数外面定义吗?还有什么函数需要定义在主函数外?
错误程序如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
|
怪我咯2017-04-17 11:05:46
函數中定義函數是非法的,你可以:
使用Functor:
1 2 3 4 5 |
|
使用lambda:
1 2 3 |
|
PS: 可以簡寫為:
1 2 3 |
|
PPS:如果謂詞函數其它地方用不上,並且謂詞函數很簡短:
1 2 3 |
|
若對C 11的lambda感興趣,請利用搜索引擎獲取更多知識。
如果你想讓程序有更好的兼容性,推薦使用Functor方式。