lambda比较确定性吗?

Luc*_*ore 16 c++ lambda c++11

我们知道,比较两个匹配的字符串文字可以导致相等:

"hello" == "hello" //could be true or false
Run Code Online (Sandbox Code Playgroud)

对于lambdas也是如此:

[](){} == [](){} //false - guaranteed?
Run Code Online (Sandbox Code Playgroud)

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

R. *_*des 24

你无法比较lambda的相等性.你在那个小片段中看到的是将lambda转换为函数指针然后比较函数指针.无法保证这些函数指针是否相同,这意味着结果可以是truefalse.

  • 不,比较函数指针不是未定义的行为.结果是未指定的.(IOW,'true`和`false`都是有效的结果,但让你怀孕不是) (6认同)
  • @billz是的,lambdas只是常规的函数对象,顶部有一些特殊的语法,有时还有一些额外的功能(比如上面转换为函数指针). (2认同)