Ошибка базы данных для разработки базы данных Mysql для онлайновой системы мониторинга студентов

Вы можете думать, что указатель функции является адресом первой инструкции в машинный код этой функции. Любой указатель можно рассматривать как bool: 0 - false, а все остальное - true. Как вы заметили, при нажатии на void * и заданной в качестве аргумента для оператора вставки потока (<<), адрес печатается. (Показать строго, приведение указателя к функции в void * не определено.)

Без трансляции история немного сложна. Для сопоставления перегруженных функций («разрешение перегрузки») компилятор C ++ собирает набор функций-кандидатов, и из этих кандидатов выбирает «наилучшую жизнеспособную», используя при необходимости неявные преобразования. Морщинка - это правила сопоставления, которые образуют частичный порядок, поэтому множественные наиболее эффективные совпадения вызывают ошибку двусмысленности.

В порядке предпочтения стандартные преобразования (и, конечно, также конверсии, определяемые пользователем и многоточие, не подробные) являются

  • точное соответствие (, т.е. , не требуется никакого преобразования)
  • promotion (, например , int to float)
  • другие преобразования

Последняя категория включает в себя логические преобразования, и любой тип указателя может быть преобразован в bool: 0 (или NULL ]) - false, а все остальное - true. Последний отображается как 1, когда передается оператору вставки потока.

Вместо этого вместо 0 измените свою инициализацию на

pf = 0;

. Помните, что инициализация указателя с нулевое константное выражение дает нулевой указатель.

0
задан Robert Waltson 18 January 2019 в 13:17
поделиться