提问人:Luchian Grigore 提问时间:12/20/2012 更新时间:12/20/2012 访问量:205
lambda 比较是确定性的吗?
Is lambda comparison deterministic?
问:
众所周知,比较两个匹配的字符串文字可以导致相等:
"hello" == "hello" //could be true or false
lambda 是否也是如此:
[](){} == [](){} //false - guaranteed?
编译器可以自由地随心所欲地计算这一点,还是保证它会计算到?合法吗?以上内容实际上比较了什么?false
答:
24赞
R. Martinho Fernandes
12/20/2012
#1
您不能比较 lambda 是否相等。您在这个小片段中看到的是将 lambda 转换为函数指针,然后比较函数指针。不能保证这些函数指针相同或不同,这意味着结果可以是 或 。true
false
评论
6赞
R. Martinho Fernandes
12/20/2012
不,比较函数指针不是未定义的行为。但结果未指定。(IOW,两者都是有效的结果,但让你怀孕不是)true
false
0赞
Pubby
12/20/2012
@LuchianGrigore 唯一可能发生的事情是 或 。true
false
0赞
Luchian Grigore
12/20/2012
啊。。。所以它和字符串文字是一样的吗?
1赞
R. Martinho Fernandes
12/20/2012
@Luchian嗯,是的,但出于不同的原因:明确允许字符串文字重叠,然后数组将衰减到相同的指针。lambda 不需要重叠即可转换为同一指针。
2赞
R. Martinho Fernandes
12/20/2012
@billz是的,lambda 只是常规的函数对象,上面有一些特殊的语法,有时还有一些额外的内容(如前面提到的到函数指针的转换)。
上一个:通过反射获取第一个父级的字段
下一个:一元运算符的关联性是否有意义?
评论
operator==