Opened 4 years ago
Closed 4 years ago
#867 closed ожидается проверка (задача сдана)
WW #13
Reported by: | Filippov Denis | Owned by: | Sokolov Viacheslav |
---|---|---|---|
Component: | WW_array | Version: | 3.0 |
Keywords: | Cc: |
Description
Change History (6)
comment:1 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
comment:3 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
bool - специализация отличается по интерфейсу:
26 const T & at(std::size_t index) const;
27 T & at(std::size_t index);
28 const T & operator[](std::size_t index) const noexcept;
29 T & operator[](std::size_t index) noexcept;
vs
78 bool at(std::size_t index) const;
79 my_array_bool_proxy at(std::size_t index);
80 my_array_bool_proxy operator[](std::size_t index) const noexcept;
(отличия в количестве операций и их свойствах)
comment:5 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 2.0 → 3.0 |
comment:6 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
164 return my_array_bool_proxy(const_cast<uint8_t *>(&_data[proxyIndex]), index - proxyIndex * 8);
const_cast<uint8_t *> не нужен
можно сообщение сделать осмысленным - написать, что произошло и индекс.
< 0 быть не может, тип беззнаковый.
29 void fill(T val) noexcept;
в текущей реализации нет смысла принимать по значению, это лишь порождает лишнюю копию.
const T& / сэкономить одно копирование с помощью std::move.
noexcept только если конструктор копирования noexcept.
а если хочется N =
2^32 - 1
? либо static_assert, либо реализацию поправитьчище сделать static_cast<uint8_t>() << _bit.
Знаковый сдвиг != беззнаковый сдвиг.
100 return _data[index];
101 }
assert все же не помешает
145 template<std::size_t N>
146 bool my_array<bool, N>::operator[](std::size_t index) const noexcept
147 {
148 std::size_t proxy_index = index / 8;
149 return my_array_bool_proxy((uint8_t *)(&_data[proxy_index]), index * 8 - proxy_index * 8);
150 }
а зачем proxy, если возвращаемое значение - bool? Кроме того, в реализации ошибка
Вместо c-cast здесь должен был бы быть const_cast
164 template<std::size_t N>
165 void my_array<bool, N>::fill(bool val) noexcept
166 {
167 for (size_t i = 0; i < N; i++)
168 (*this)[i] = val;
169 }
можно сделать эффективнее с помощью memset
имелось в виду ~?
почему int?
Сейчас a[i] = a[i + 1] работает неправильно (для bool-перегрузки)