Является ли лямбда-сравнение детерминированным? - программирование
Подтвердить что ты не робот

Является ли лямбда-сравнение детерминированным?

Как известно, сравнение двух совпадающих строковых литералов может привести к равенству:

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

То же самое верно для лямбда:

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

Можно ли компилятору оценить это по своему усмотрению, или он уверен, что он будет оценивать до false? Это законно? Что на самом деле сравнивает?

4b9b3361

Ответ 1

Вы не можете сравнить лямбда для равенства. То, что вы видите в этом маленьком фрагменте, - это лямбды, которые преобразуются в указатели на функции, а затем сопоставляются указатели на функции. Нет никаких гарантий того, что эти указатели функций являются или не совпадают, что означает, что результат может быть либо true, либо false.