Re: chrono матьего
От: Vamp Россия  
Дата: 12.08.23 02:31
Оценка: +3
Здравствуйте, reversecode, Вы писали:

R>кто нибудь может обьяснить мысли бухого в стельку коммитета по такому ограничению ?

R>только не надо про оверфловы,их и так хоть попой жуй в C++

R>
R>    std::chrono::hours h(5);
R>    std::chrono::seconds s(h); //ok
R>    std::chrono::hours hh(s); //error
R>


Переполнения тут не при чем, а ошибка тут совершенно уместна. Секунды в часы не переводятся (53 секунды это сколько часов?), по-этому автоматическое преобразование заблокировано. Часы в секунды переводятся, так что обратное преобразование работает автоматически. Все так, как и должно быть.
Да здравствует мыло душистое и веревка пушистая.
Re: chrono матьего
От: Sm0ke Россия ksi
Дата: 12.08.23 18:26
Оценка: +3
std::chrono::hours h{5};
std::chrono::seconds s{h};
std::chrono::duration< double, std::ratio<3600> > hh{s}; // ok
std::chrono::duration< long, std::ratio<3600> > hh2{s}; // compile error


Видимо по дифолту делать из секунд целочисленные часы запрещено
А часы с плавающей точкой можно
Re: chrono матьего
От: T4r4sB Россия  
Дата: 11.08.23 19:36
Оценка: +1
Здравствуйте, reversecode, Вы писали:

R>кто нибудь может обьяснить мысли бухого в стельку коммитета по такому ограничению ?


Эта библиотека — это просто сборник паттернов, в которых они доведены до абсурда.
Я уже писал даже на этом форуме, что если бы там было самое тупое АПИ, которое тупо возвращает время в попугаях, и с которым бы я иногда лажал с размерностями и за 5 минут находил такие баги — то это было бы всё равно быстрее, чем по полчаса ублажать компилятор, пытаясь понять, как все эти охренительные типы, сложенные за забором из std::chrono::100500namespaced, кастовать друг другу и комбинировать.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
chrono матьего
От: reversecode google
Дата: 11.08.23 19:26
Оценка:
кто нибудь может обьяснить мысли бухого в стельку коммитета по такому ограничению ?
только не надо про оверфловы,их и так хоть попой жуй в C++

    std::chrono::hours h(5);
    std::chrono::seconds s(h); //ok
    std::chrono::hours hh(s); //error


нужно явно дюрайшин кастить
причем в конструкторе duration этот каст уж есть
но ограничен констреином
https://en.cppreference.com/w/cpp/chrono/duration/duration

template< class Rep2, class Period2 >
constexpr duration( const duration<Rep2,Period2>& d );

Constructs a new duration from one of several optional data sources.
4) Constructs a duration by converting d to an appropriate period and tick count, as if by std::chrono::duration_cast<duration>(d).count(). In order to prevent truncation during conversion, this constructor only participates in overload resolution if computation of the conversion factor (by std::ratio_divide<Period2, Period>) does not overflow and:

or both:
std::ratio_divide<Period2, period>::den == 1, and
std::chrono::treat_as_floating_point<Rep2>::value == false.

Re[2]: chrono матьего
От: reversecode google
Дата: 12.08.23 12:09
Оценка:
переполнение тоесть подразумевал потерю после деления
что бы провести преобразование нужно поделить

а
int oops = 10/200; сколько будет ?
давайте весь C++ сломаем

предлагаю запретить имплиситно операцию деления в С++ )))
Re[2]: chrono матьего
От: CRT  
Дата: 12.08.23 16:14
Оценка:
Здравствуйте, Vamp, Вы писали:

V>Секунды в часы не переводятся (53 секунды это сколько часов?)

0,0147222
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.