Загадочный случай 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