Почему выражение лямбды не только синтаксический сахар функтора?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему выражение лямбды не только синтаксический сахар функтора?

Сообщение Anonymous »

Рассмотрим следующий код: < /p>

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

int main() {
int n = 0;
return [n]  { return n; }(); // ok
}
Согласно https://cppinsights.io, код выше будет переведен в следующий код:

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

int main() {
int n = 0;

class __lambda_3_12 {
public:
inline /*constexpr */ int operator()() const {
return n;
}

private:
int n;

public:
__lambda_3_12(int& _n) : n{_n} {
}

} __lambda_3_12{n};

return __lambda_3_12.operator()();
}
< /code>
Однако следующий код плохо сформирован: < /p>
int main() {
int n = 0;
// error: invalid use of 'this' outside of a non-static member function
return [n]  { return this->n; }();
}
Я думаю, что стандарт C ++ должен запретить компилятор использовать этот указатель для доступа к захваченным переменным. Тем не менее, я не могу найти точные утверждения в 7.5.6 [expr.prim.lambda] стандартного черновика C ++.

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

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

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

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

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

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

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