Change History (4)

comment:1 Changed 4 years ago by Дмитрий Свиридкин

Owner: changed from Дмитрий Свиридкин to Бубнов Данил Константинович
Type: ожидается проверкаожидаются исправления

Зачем дубликат функции make_string для вектора? Они одинаковые.

А давайте без constexpr if.

return static_cast<std::size_t>(std::log10(std::abs(static_cast<double>(value)))) + 2;
Для этого не нужны вычисления с плавающей точкой.

     char buff[s.capacity() + 1];
     auto result = std::to_chars(buff, buff + s.capacity(), value);

А что если пользовательский код дурной и не резервирует строку? Пользователь вообще не обязан резервировать память. Ну переаллоцируется и переаллоцируется. А тут вы завязываете корректность работы совершенно независимого метода на то, что пользовательский код проделал какие-то манипуляции.
Далее -- это вообще не C++. s.capacity() не известен на этапе компиляции. Это сишный VLA. В C++ их нет. У вас скомпилировалось просто потому, что это расширение языка поддерживается gcc.


4.5 + 0.5

comment:2 Changed 4 years ago by Бубнов Данил Константинович

Owner: changed from Бубнов Данил Константинович to Дмитрий Свиридкин
Type: ожидаются исправленияожидается проверка
Version: 1.02.0

comment:3 Changed 4 years ago by Дмитрий Свиридкин

Owner: changed from Дмитрий Свиридкин to Бубнов Данил Константинович
Type: ожидается проверкаожидаются исправления

Знак числа может не поместиться.

 *result.ptr = '\0';
        s.append(buff);

Лучше завернуть в string_view чем добавлять завершающий ноль.
s.append(string_view(buff, result.ptr))

constexpr int lengthOfMaximumIntegral = sizeof("18446744073709551616");
Не самое лучшее решение. Ведь можно и int128 сделать, специализировав is_integral и to_chars. И получить segfault, потому что буффер всегда под 64 бита. ЛУчше взять std::numeric_limits<T>::max
и посчитать в нем число цифр в цикле. Это можно сделать в constexpr функции.


5.5 + 3

comment:4 Changed 4 years ago by Дмитрий Свиридкин

Resolution: задача сдана
Status: assignedclosed
Note: See TracTickets for help on using tickets.