lambda 比较是确定性的吗?

Is lambda comparison deterministic?

提问人:Luchian Grigore 提问时间:12/20/2012 更新时间:12/20/2012 访问量:205

问:

众所周知,比较两个匹配的字符串文字可以导致相等:

"hello" == "hello" //could be true or false

lambda 是否也是如此:

[](){} == [](){} //false - guaranteed?

编译器可以自由地随心所欲地计算这一点,还是保证它会计算到?合法吗?以上内容实际上比较了什么?false

C++ C++11 Lambda

评论

0赞 Kerrek SB 12/20/2012
闭包类型甚至吗?我在快速检查中找不到对此的引用......operator==
0赞 Pubby 12/20/2012
LucDanton告诉我,以前不能保证。

答:

24赞 R. Martinho Fernandes 12/20/2012 #1

您不能比较 lambda 是否相等。您在这个小片段中看到的是将 lambda 转换为函数指针,然后比较函数指针。不能保证这些函数指针相同或不同,这意味着结果可以是 或 。truefalse

评论

6赞 R. Martinho Fernandes 12/20/2012
不,比较函数指针不是未定义的行为。但结果未指定。(IOW,两者都是有效的结果,但让你怀孕不是)truefalse
0赞 Pubby 12/20/2012
@LuchianGrigore 唯一可能发生的事情是 或 。truefalse
0赞 Luchian Grigore 12/20/2012
啊。。。所以它和字符串文字是一样的吗?
1赞 R. Martinho Fernandes 12/20/2012
@Luchian嗯,是的,但出于不同的原因:明确允许字符串文字重叠,然后数组将衰减到相同的指针。lambda 不需要重叠即可转换为同一指针。
2赞 R. Martinho Fernandes 12/20/2012
@billz是的,lambda 只是常规的函数对象,上面有一些特殊的语法,有时还有一些额外的内容(如前面提到的到函数指针的转换)。