#893 closed ожидается проверка (задача сдана)
WW #13
Reported by: | ushakova.alina | Owned by: | Дмитрий Свиридкин |
---|---|---|---|
Component: | WW_array | Version: | 3.0 |
Keywords: | Cc: |
Description
Change History (5)
comment:1 Changed 4 years ago by
Owner: | changed from Дмитрий Свиридкин to ushakova.alina |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 4 years ago by
Owner: | changed from ushakova.alina to Дмитрий Свиридкин |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 1.0 → 2.0 |
comment:3 Changed 4 years ago by
Owner: | changed from Дмитрий Свиридкин to ushakova.alina |
---|---|
Type: | ожидается проверка → ожидаются исправления |
оператор присваивания через Proxy перестал работать корректно
(uint8_t)0 - 1
здесь все равно получится int.
0 приводится к uint8
потом приводится к int чтоб выполнить вычитание
получается int
comment:4 Changed 4 years ago by
Owner: | changed from ushakova.alina to Дмитрий Свиридкин |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 2.0 → 3.0 |
comment:5 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
typename my_array<bool, N>::Proxy& my_array<bool, N>::Proxy::operator=(bool x) { data_ &= ~(1 << bit_); data_ |= ~(1 << bit_); return *this; }
Этот код всегда выставляет бит в единицу.
if (val) { memset(array_, 0, (N + BYTE - 1) / BYTE); return; } memset(array_, ~0, (N + BYTE - 1) / BYTE);
Ветки перепутаны.
Proxy operator[](std::size_t index) { return Proxy(array_[index / BYTE], index); }
Объект Proxy будет неадекватен при index >= 8;
Не забывайте тестировать решения более чем на одном примере.
5 (все хорошо, но некорректно.)
Note: See
TracTickets for help on using
tickets.
#include "../include/my_array.h"
Пора уже начать использовать ключ -I. Либо target_include_directories в cmake.
присваивани через proxy работает неверно.
используйте беззнаковые типы для манипуляции с битами.
char(0) - 1
-- результатом будет int. cмотрите integer promotion на cppreferenceмагическая константа 8.
Proxy(const char* data, std::size_t bit) : data_(const_cast<char *>(data)), bit_(bit % 8) {};
Не стоит отбрасывать const. Особенно в функциях, в которых этот const был в сигнатуре.