【问题标题】:Is lambda comparison deterministic?lambda比较是确定性的吗?
【发布时间】:2012-12-20 11:08:53
【问题描述】:

我们知道,比较两个匹配的字符串字面量会导致相等:

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

对于 lambdas 也同样适用:

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

编译器是否可以随意评估它,还是保证它会评估为false?合法吗?以上实际比较的是什么?

【问题讨论】:

  • 闭包类型是否 operator==?我在快速检查中找不到参考...
  • LucDanton 告诉我以前不能保证。

标签: c++ c++11 lambda


【解决方案1】:

您无法比较 lambda 的相等性。您在那个小 sn-p 中看到的是 lambdas 被转换为函数指针,然后比较函数指针。无法保证这些函数指针相同或不同,这意味着结果可以是truefalse

【讨论】:

  • 不,比较函数指针不是未定义的行为。结果是未指定的。 (IOW,truefalse 都是有效结果,但让你怀孕不是)
  • @LuchianGrigore 唯一可能发生的事情是truefalse
  • 啊...所以它与字符串文字相同吗?
  • @Luchian 好吧,是的,但是出于不同的原因:明确允许字符串文字重叠,然后数组将衰减到同一个指针。 lambda 不需要重叠就可以转换为相同的指针。
  • @billz 是的,lambdas 只是普通的函数对象,顶部有一些特殊的语法,有时还有一些额外的(比如前面提到的到函数指针的转换)。
猜你喜欢
  • 2017-02-12
  • 2011-12-31
  • 2012-05-13
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-28
相关资源
最近更新 更多