Opened 4 years ago

Closed 4 years ago

#890 closed ожидается проверка (задача сдана)

WW #13

Reported by: Денис Лочмелис Owned by: Дмитрий Свиридкин
Component: WW_array Version: 2.0
Keywords: Cc:

Description

1) Я сделал одно поле у my_array<bool>. Это позволило не делать конструктор и еще немного укоротить пару других функций, но главное - там есть законный constexpr! Правда, в задании сказано, что полей быть не должно... В общем, если надо, я уберу, но попробовать хочу так.

2) Valgrind говорит мне "Conditional jump or move depends on uninitialised value(s)". Я долго пытался понять, в чем дело, но так и не смог. Впрочем, все работает.

3) Осознанный const_cast.

Change History (4)

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

Owner: changed from Дмитрий Свиридкин to Денис Лочмелис
Type: ожидается проверкаожидаются исправления
src/main.cpp: In function ‘int main()’:
src/main.cpp:90:36: error: catching polymorphic type ‘class std::out_of_range’ by value [-Werror=catch-value=]
   90 |         } catch (std::out_of_range e) {

Оператор присваивания через proxy работает неверно.
Проверьте все 4 возможных варианта.

static_cast<size_t>(std::ceil(N / 8.0))
Зачем тут деление с плавающей точкой и округление? Это выполяняется в целых числах.

Появление статического константного поля никак не влияет на конструктор. byte data[data_size] -- в качестве data_size может выступать любое constexpr выражение над N (byte data[N / 8 + (N % 8) ? 1 : 0])

fill для bool стоит реализовывать через memset.

void fill(T val) { нужна константная ссылка

магическая константа 8.

2) Valgrind говорит мне "Conditional jump or move depends on uninitialised value(s)". Я долго пытался понять, в чем дело, но так и не смог. Впрочем, все работает.

Нет, не работает.
byte data[N] -- массив неинициализированных байтов. Над которыми вы начинаете вычислять битовые операции и получаете новые неинициализированные bool в качестве аргументов других функций.

comment:2 Changed 4 years ago by Денис Лочмелис

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

exceptions: fixed
присваивание прокси: fixed
деление с плавающей точкой: fixed
статическое поле: understand
fill через memset: fixed
8: fixed
неинициализированная data: fixed

comment:3 Changed 4 years ago by Денис Лочмелис

о, и константная ссылка для fill: тоже fixed

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

Resolution: задача сдана
Status: assignedclosed
    static constexpr size_t BYTE_SIZE = 8;

    static constexpr size_t data_size = N / 8 + ((N % 8) ? 1 : 0);

Только что дали константе имя и сразу же про него забыли.


9.8

Note: See TracTickets for help on using tickets.