Вывод адреса метода класса. Различия в выводе с помощью printf() и cout

170
25 апреля 2018, 06:41

Добрый день. Объясните пожалуйста, почему когда я пытаюсь вывести адрес метода класса с помощью функции printf(), он выводится в консоль в обычном 16-ном виде, но когда использую для этой цели cout, выводится 1. Почему так происходит? В интернете ничего не нашел, возможно плохо искал. Что значит 1? Заранее спасибо за помощь.

PhoneBook book("Rafalsky", "Andrey", "Anatoliyovich", 13, 2, 1999, "+380999999999", "Uk", "Polt");
    printf("Person::Show -- %p\n", &Person::Show);
    cout << &Person::Show << endl;
Answer 1

Функция printf с параметром p не может вывести значение указателя на метод класса, так как указатель на метод класса не может быть приведен к void *. cout же приводит указатель на метод класса к bool. Никаких встроенных методов для печати значений указателей на методы класса нет. Можно попробовать выводить значение указателя побайтово:

auto p_method{&Person::Show};
auto p_byte{reinterpret_cast<::std::uint8_t const *>(::std::addressof(p_method))};
::std::size_t byte_index{};
do
{
    ::std::cout << ::std::hex << ::std::setw(2) << ::std::setfill('0') <<
        static_cast<::std::uint32_t>(p_byte[byte_index]);
    ++byte_index;
}
while(sizeof(p_method) != byte_index);

online compiler

READ ALSO
C++ GetModuleBase выдаёт ошибку почему?

C++ GetModuleBase выдаёт ошибку почему?

Нужно получить базовый адрес процесса, нашёл пример кода но он и подобные ему выдают вот такую ошибку в чём может быть дело? Скрин ошибки https://imgurcom/P0lTSp4

152
С++ Есть способ получить базовый адрес процесса?

С++ Есть способ получить базовый адрес процесса?

Как в С++ получить базовый адрес процесса? Не могу найти примеров как получить такой адрес

177
Правка кода хеш функции

Правка кода хеш функции

Не совсем корректно работает программа для поиска индекса элемента по ключу

179
Не понимаю в чём проблема (динамические массивы структур)

Не понимаю в чём проблема (динамические массивы структур)

Задание: сделать массив из структур(содержание структуры это информация про ваших друзей, имя фамилия и тд

242