Является ли лямбда-сравнение детерминированным?
Как известно, сравнение двух совпадающих строковых литералов может привести к равенству:
"hello" == "hello" //could be true or false
То же самое верно для лямбда:
[](){} == [](){} //false - guaranteed?
Можно ли компилятору оценить это по своему усмотрению, или он уверен, что он будет оценивать до false
? Это законно? Что на самом деле сравнивает?
Ответы
Ответ 1
Вы не можете сравнить лямбда для равенства. То, что вы видите в этом маленьком фрагменте, - это лямбды, которые преобразуются в указатели на функции, а затем сопоставляются указатели на функции. Нет никаких гарантий того, что эти указатели функций являются или не совпадают, что означает, что результат может быть либо true
, либо false
.