Opened 4 years ago
Closed 4 years ago
#908 closed ожидается проверка (задача сдана)
WW #13
Reported by: | Alexander Morozov | Owned by: | Sokolov Viacheslav |
---|---|---|---|
Component: | WW_array | Version: | 2.0 |
Keywords: | Cc: |
Description
Change History (3)
comment:1 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
Вроде бы все это исправил. Из-за за того, что вынес реализацию, получилось нагромождение темплейтов, возможно, что-то сделал неоптимально. Хотел сделать proxy приватным, поэтому он получился свой для каждого N. Впрочем, это не должно влиять на производительность.
comment:3 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
67 if (index >= N) 68 throw std::out_of_range("Element index is out of range: index " + 69 std::to_string(index) + " in array with size " + 70 std::to_string(N));
можно было бы не дублировать 4 раза, вынести в функцию
стоило бы все же добавить assert-ы для обращений через []
33 proxy &operator=(proxy &other) = delete;
35 bool operator=(proxy &&other);
первая строчка не удаляет
proxy &operator=(const proxy &other)
и при этом такой (non-const) оператор все равно не генерируется автоматически, то есть она не имеет смысла в данном случае. Стоило бы добавить
33 proxy &operator=(const proxy &other) = delete;
109 _val &= ~(1 << _bit_num);
110 _val = val << _bit_num;
здесь стоило бы вести работу с беззнаковыми типами, потому что знаковые и беззнаковые битовые операции могут работать по-разному. Кроме того, лучше минимизировать количество implicit преобразований, в данном случае - integer promotion можно было бы избежать при помощи явного static_cast
35 bool operator=(proxy &&other);
noexcept?
Просьба разбить обьявление и определение. Так стоит делать, чтобы отдельно смотреть на интерфейс, отдельно - на реализацию. Зачастую интересна не реализация, а интерфейс.
Сообщение стоит расширить, добавить информацию об индексе, по которому было обращение
22 T &operator[](size_t index) { return _data[index]; }
assert все же не повредит
также можно дописать noexcept
на самом деле почти все методы можно пометить как constexpr
final у классов?
сейчас a[0] = a[1] работает неправильно у bool-специализации. Нужно написать на это тест. Причина в автосгенерированном
proxy& operator=(proxy&&);
может переполниться (переполнение беззнакового - не UB, поэтому скомпилируется)
69 return _data[index / 8] >> (index % 8);
здесь ошибка. Нужен тест.
84 void fill(bool val) noexcept { std::fill(_data, _data + SIZE, val * 0xff); }
кажется, val ? 255u : 0u понятнее и сильно длиннее, чем val * 0xff