«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему `std::cout

Почему `std::cout

Опубликовано 18 ноября 2024 г.
Просматривать:834

Why does `std::cout

Загадочный случай f; Почему при выводе всегда выводится 1?

Обнаружение необычного поведения, когда вызов функции без круглых скобок (f;) и вывод ее результата с помощью std::cout постоянно дает число 1, может вызвать вопросы. Первоначально можно было бы ожидать, что код напечатает указатель на функцию, но наблюдения показывают обратное.

Углубляясь в код ниже:

#include 
using namespace std;

void pr()
{
    cout 

Мы видим, что pr; технически не вызывает функцию pr(). Вместо этого в cout передается указатель функции. Когда указатель функции преобразуется в логическое значение во время этого процесса, он ведет себя аналогично логическому выражению, где ненулевое значение оценивается как true. При печати это значение преобразуется в 1.

Кроме того, в стандарте до C 11 не существует перегрузки, которая позволяла бы передавать указатель функции в потоковом режиме. Это затрудняет форматирование и печать указателей функций напрямую с помощью std::cout. Однако с появлением C 11 для достижения этой цели можно определить собственную перегрузку:

template 
std::ostream & operator

Используя эту перегрузку, cout

(func_ptr=
)(num_args=0)

Этот пользовательский перегрузка демонстрирует печать указателей функций различной арности. Хотя это облегчает проблему с указателями на функции, оно не полностью решает сценарии, связанные с перегруженными функциями или шаблонами функций, где указание желаемой перегрузки становится необходимым.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3