MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Что такое адрес функции?"
Answer 1108241
Почему ваш код выводит одинаковые значения, на самом деле легко объяснить. Стандарт определяет стандартное неявное преобразование из типа функции в тип указатель на функцию:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf
7.3 Function-to-pointer conversion [conv.func] 1 An lvalue of function type T can be converted to a prvalue of type “pointer to T”. The result is a pointer to the function.
Так как вывести в cout саму функцию нельзя, срабатывает это преобразование, и вы выводите в поток тот же указатель на функцию (точнее, результат его приведения к целочисленному типу).
А вот сказать определенно, что такое "адрес функции", уже сложнее. Стандарт определяет, что значением адреса объекта является адрес первого байта его данных, но для адреса функции нет аналогичного утверждения. Соответственно, приходится делать вывод, что адрес функции - это просто некоторое определяемое реализацией значение, которое не обязано совпадать с реальным адресом машинного кода функции в памяти. На практике так и есть, например, в Visual C++ в отладочной конфигурации значение указателя на функцию не совпадает с реальным адресом (который можно получить через специальный API платформы).
Как их использовать? Судя по выводам предыдущего абзаца, никак... Вы можете брать указатель на функцию, хранить его и разыменовать для вызова функции, но само значение указателя для вас - "черный ящик".
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.