Почему у `std :: time` есть ненужный параметр? - PullRequest
6 голосов
/ 25 апреля 2020

С cppref :

std::time_t time(std::time_t* arg);

Возвращает текущее календарное время, закодированное как объект std::time_t, а также сохраняет его в объекте. на который указывает arg, если arg не является нулевым указателем.

Я никогда не вижу, чтобы кто-либо вызывал std::time с аргументом, отличным от нулевого указателя. Мне просто интересно:

1. Почему std::time имеет ненужный параметр?

2. Есть ли какая-то мотивация / обоснование за дизайном?

1 Ответ

4 голосов
/ 25 апреля 2020

Исторически time_t был абстрактным типом, и, вероятно, ожидалось, что это может быть структура или тип расширения, который не может быть надежно возвращен, или где компиляторы могут не согласиться в ABI для его возврата, например что возвращение путем сохранения его по адресу, указанному вызывающим абонентом, «имело смысл». Обратите внимание на существование интерфейса difftime и неопределенность C в отношении интерпретации значений time_t. Только POSIX (намного позже) требовал, чтобы единица измерения составляла секунды (начиная с эпохи и определяя эпоху). Я не уверен, есть ли какие-то конкретные доказательства этого как мотивация (может быть, в документе об обосновании C89?), Но это та область, в которой я хотел бы рассмотреть.

Для C ++ это просто то, что std::time интерфейсом является функция C time, заключенная в std::.

...