Размер указателя на функцию

122
18 декабря 2020, 05:30

Пусть имеется банальный код:

void foo(){}
int main(){
std::cout << foo;
}

Вывод на консоль: 1. Я не понимаю почему так, ведь foo в данном случае функция и должна вывести адрес, который уж точно не равен единице.

Answer 1

Перегрузки оператора << для вывода адреса функций нет. Зато есть перегрузка для вывода bool. Соответственно адрес функции неявно преобразуется в bool. Вывести значение адреса можно явно преобразовав указатель на функцию к указателю на void (перегрузка оператора << для которого как раз печатает значение адреса):

std::cout << reinterpret_cast<void *>(&foo);
READ ALSO
Деструктор в контейнерах?

Деструктор в контейнерах?

Допустим, есть класс:

126
Вставка Watermark в поток печати

Вставка Watermark в поток печати

Microsoft говорит нам, что мы можем модифицировать поток печати посредством разработки плагинов для драйвера печати

106
Чтение бинарных данных из std::wifstream

Чтение бинарных данных из std::wifstream

Необходимо считать в std::string байты файлаОдно из требований: поддержка юникодных имен файлов

134