#include <iostream>
#include <functional>
using Callback = std::function<void(const int)>;
int main() {
Callback testCall = [](const int &num) {
std::cout << "callback: " << num << " - " << &num << std::endl;
};
int num = 42;
testCall(num);
std::cout << "main: " << num << " - " << &num << std::endl;
}
Возможный вывод:
callback: 42 - 000000B19197F618
main: 42 - 000000B19197F694
Как видите, даже если я назначаю лямбда-функцию, которая принимает параметр по ссылке, она все равно использует копию.
правильно?
Если да, то почему он все еще компилируется? Почему, по крайней мере, нет предупреждения о несоответствии между параметрами объявления Callback
и назначенной лямбдой. (const int &num
против const int num
)
Когда не используется const
, он не компилируется.
PS. если вы найдете более подходящее название, не стесняйтесь редактировать.