Opened 4 years ago

Closed 4 years ago

Last modified 4 years ago

#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: ожидается проверкаожидаются исправления
/home/dmis/DATA/WORKSPACE/cpp-labs/lab_13/check/lab_13/src/main.cpp:1:10: fatal error: my_array.h: No such file or directory
    1 | #include "my_array.h"

#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 был в сигнатуре.

comment:2 Changed 4 years ago by ushakova.alina

Owner: changed from ushakova.alina to Дмитрий Свиридкин
Type: ожидаются исправленияожидается проверка
Version: 1.02.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 ushakova.alina

Owner: changed from ushakova.alina to Дмитрий Свиридкин
Type: ожидаются исправленияожидается проверка
Version: 2.03.0

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

Resolution: задача сдана
Status: assignedclosed
    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 (все хорошо, но некорректно.)

Last edited 4 years ago by Дмитрий Свиридкин (previous) (diff)
Note: See TracTickets for help on using tickets.