Opened 4 years ago
Closed 4 years ago
#1040 closed ожидаются исправления (задача сдана)
WW #18
Reported by: | Бубнов Данил Константинович | Owned by: | Бубнов Данил Константинович |
---|---|---|---|
Component: | WW_format | Version: | 2.0 |
Keywords: | Cc: |
Description
Change History (4)
comment:1 Changed 4 years ago by
Owner: | changed from Дмитрий Свиридкин to Бубнов Данил Константинович |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 4 years ago by
Owner: | changed from Бубнов Данил Константинович to Дмитрий Свиридкин |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 1.0 → 2.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: | assigned → closed |
Note: See
TracTickets for help on using
tickets.
Зачем дубликат функции make_string для вектора? Они одинаковые.
А давайте без constexpr if.
return static_cast<std::size_t>(std::log10(std::abs(static_cast<double>(value)))) + 2;
Для этого не нужны вычисления с плавающей точкой.
А что если пользовательский код дурной и не резервирует строку? Пользователь вообще не обязан резервировать память. Ну переаллоцируется и переаллоцируется. А тут вы завязываете корректность работы совершенно независимого метода на то, что пользовательский код проделал какие-то манипуляции.
Далее -- это вообще не C++.
s.capacity()
не известен на этапе компиляции. Это сишный VLA. В C++ их нет. У вас скомпилировалось просто потому, что это расширение языка поддерживается gcc.4.5 + 0.5