Здравствуйте, Сыроежка, Вы писали:
С>С другой стороны, вы можете скомпилировать следующий код
С>С>#include <iostream>
С>int main()
С>{
С> int ( *fn )( void ) = [] { return 0; };
С> std::cout << fn << std::endl;
С>}
С>
С>Этот код даст тот же самый результат, который вы получили для своего собственного исходного примера. Только в моем примере я явно преобразую лямбда-выражение в указатель на функцию.
С>Поэтому значение, равное 1, для этого адреса — это особенность того компилятора, который вы используете. Другие компиляторы моогут выдать совершенно другое значение для адреса указателя на функцию для лямбда-выражения.
#include <iostream>
#include <iomanip>
int main()
{
int ( *fn )( void ) = [] { return 0; };
std::cout << std::boolalpha << fn << '\n' << reinterpret_cast<const void*>(fn) << std::endl;
}
Compilation output:
source.cpp: In function 'int main()':
source.cpp:7:81: warning: ISO C++ forbids casting between pointer-to-function and pointer-to-object [enabled by default]
Execution output:
true
0x8048b16
Так что там про адрес со значением 1 и особенности компилятора?