Из любопытства я проверил размер выражения ламба. Моей первой мыслью было, что они будут размером 4
байт, как указатель на функцию. Как ни странно, результат моего первого теста был 1
:
auto my_lambda = [&]() -> void {};
std::cout << sizeof(my_lambda) << std::endl;
Затем я проверил с некоторыми вычислениями внутри лямбды, вывод по-прежнему 1
:
auto my_lambda2 = [&]() -> void {int i=5, j=23; std::cout << i*j << std::endl;};
std::cout << sizeof(my_lambda2) << std::endl;
Моя следующая идея была довольно случайной, но результат, в конце концов, изменился, отображая ожидаемое 4
:
auto my_lambda3 = [&]() -> void {std::cout << sizeof(my_lambda2) << std::endl;};
std::cout << sizeof(my_lambda3) << std::endl;
По крайней мере, в Visual Studio 2010. В идеале все еще отображается 1
в качестве вывода.
Я знаю о стандартном правиле, что лямбда-выражение не может появиться в неоцененном контексте, но afaik, который учитывает только прямое использование лямбда, как
sizeof([&]() -> void {std::cout << "Forbidden." << std::endl;})
на котором VS2010 подсказывает мне ошибку компилятора.
Кто-нибудь понял, что происходит?