Нам с парой разработчиков было интересно, почему:
std::cout<<std::time<<std::endl;
выводит значение 1. Что представляет собой значение и почему оно равно 1.
Ответ на случившееся: Как распечатать указатели функций с помощью cout?
Стандарт C++ определяет:
4.12 Boolean conversions
1 An rvalue of arithmetic, enumeration, pointer, or pointer to member type can be converted to an rvalue of type bool.
Цитата из анонима:
This is the only conversion specified for function pointers.
Обновлено: ответ ниже прекрасно представляет решение о том, почему 1 был напечатан, а не просто какой-либо bool, и объяснил, когда 1 не произойдет.
Да, у нас было много вероятностей, но мы хотели бы получить конкретный ответ, а не уклоняться от пуль, когда его спрашивают обучающиеся люди.
Ответ предоставлен Витторио Ромео. Вы забыли (). Я ожидал, что он должен вызывать предупреждение, по крайней мере, в обычных компиляторах.
Похоже, спасибо. Каковы процедуры завершения / прекращения обмана?
@dstackflow Кто-нибудь отметит вам вопрос.
Выбранное решение дополнительно ответило, почему 1 был выбран исключительно, и не было объяснено в другом сообщении, поэтому я решил изменить вопрос.





cppreference говорит, что:
There are no overload for pointers to non-static member, pointers to volatile, or function pointers (other than the ones with signatures accepted by the (10-12) overloads). Attempting to output such objects invokes implicit conversion to bool, and, for any non-null pointer value, the value 1 is printed (unless boolalpha was set, in which case true is printed).
Таким образом, вы получаете указатель на функцию std::time, преобразованный в bool, и это всегда true, который без boolalpha устанавливает вывод как 1.
Возможно, стоит отметить, что при некоторых компиляторах / настройках можно выдать предупреждение, которое выглядит следующим образом (пример gcc): warning: the address of 'time_t time(time_t*)' will never be NULL [-Waddress]
Почти ушел, не зная, что я был выбран выборочно или когда его нельзя было выбрать. Отличное решение.
Возможно преобразование из указателя функции в
bool.std::timeздесь не вызывается.