cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

Операторы ввода/вывода для miliseconds, seconds, etc. #483

Closed blacktea closed 8 months ago

blacktea commented 2 years ago

Предлагаю добавить операторы ввода/вывода(operator>>, operator<<) для std::chrono::duration. Это будет удобно считывать из потока значения периода. Так же избавляет от создания временной переменой.

Например, необходимо считать из стандартного ввода продолжительность чего либо измеряемое в секундах.

int period;
std::cin >> period; 
std::chrono::seconds periodSecs{ period };

Как видно, приходится создавать доп. переменную period для создания duration.

С выводом дела обстоят чуть проще, но все равно нужно вызывать count(). Вместо этого можно было писать:

std::chrono::seconds periodSecs{ 5 };
std::cout << periodSecs;

Кажется, добавление операторов не ломает какой либо код.

Полезные ссылки:

apolukhin commented 8 months ago

Операторы добавили в C++20 https://wg21.link/P0355

#include <chrono>
#include <iostream>

using namespace std::chrono_literals;

int main()
{
    std::cout << "1 second is:\n";

    // integer scale conversion with no precision loss: no cast
    std::cout << std::chrono::milliseconds(1s) << "\n"
              << std::chrono::microseconds(1s) << "\n"
              << std::chrono::nanoseconds(1s)  << "\n";

    // integer scale conversion with precision loss: requires a cast
    std::cout << std::chrono::duration_cast<std::chrono::minutes>(1s).count()
              << " minutes\n";
}

Для чтения можно использовать std::from_stream