Re[2]: Вывод лямбды
От: Balthasar  
Дата: 16.08.12 11:18
Оценка:
Здравствуйте, Сыроежка, Вы писали:

С>С другой стороны, вы можете скомпилировать следующий код


С>
С>#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 и особенности компилятора?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.