Добрый день. Объясните пожалуйста, почему когда я пытаюсь вывести адрес метода класса с помощью функции 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;
Функция 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
Сборка персонального компьютера от Artline: умный выбор для современных пользователей