Почему изменяемая лямбда преобразуется в указатель на функцию вместо вызова оператора()?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему изменяемая лямбда преобразуется в указатель на функцию вместо вызова оператора()?

Сообщение Anonymous »

Из cppinsights мы видим, как в следующем коде строка лямбда(); интерпретируется языком:

Код: Выделить всё

const auto lambda = [] () mutable {};

void foo()
{
lambda();
}
Можно наивно подумать, что эта строка вызывает лямбда-оператор (неконстантный)(), который, в свою очередь, не компилируется. Но вместо этого компилятор преобразует несхватывающую лямбду в указатель функции, вызывает указатель функции и принимает код.
Какова цель этого преобразования? На мой взгляд, было бы более логично, если бы это было отклонено. Нет никаких признаков того, что программист намеревался выполнить это преобразование. Язык делает это самостоятельно.
Обратите внимание, что преобразование происходит только в приведенном выше случае, когда вызов lambda.operator()() приведет к отмене квалификаторов. Этого не происходит (т. е. оператор() вызывается напрямую), если лямбда не является константой или оператор() не помечен как изменяемый.

Подробнее здесь: https://stackoverflow.com/questions/784 ... g-operator
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»