Opened 4 years ago

Closed 4 years ago

Last modified 4 years ago

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

WW #13

Reported by: yakovlev.aleksandr Owned by: Артур Гулецкий (huletski)
Component: WW_array Version: 2.0
Keywords: Cc:

Description


Change History (3)

comment:1 Changed 4 years ago by Артур Гулецкий (huletski)

Type: ожидается проверкаожидаются исправления

Замечания:

  • в src должен лежать main.cpp;
  • не выполняется требование "Размер (sizeof) класса my_array<T, N> должен быть равен размеру массива из N элементов типа T" -> такой код падает:
    lab_13::my_array<int, 1> a;
    assert(sizeof(a) == sizeof(int));
    

как и такой:

lab_13::my_array<bool, 1> a;
assert(sizeof(a) == 1);
  • компилируется такой код:
    lab_13::my_array<bool, 1> a;
    a[0].byte; // ?! bool.byte
    
  • есть ошибки в логике чтения/записи элементов в специализации my_array для bool. Например:
    lab_13::my_array<bool, 50> a;
    a[22] = false;
    assert(!a[22]);
    a[23] = true;
    assert(a[23] && !a[22]);
    

my_array.h

  • перегрузки по &/&& выглядят оверкилом, если надо мувнуть значение create_array()[i], можно написать std::move(create_array()[i]). Вопрос оправданности &/&& -- дискуссионный, можете оставить;
  • 55: почему решили принимать аргумент по значению? Ответ напишите в комментарии к тикету;
  • 72: списки инициализации;
  • 114: memset? в текущей реализации функции есть баг: возможна ошибка работы с памятью.

Баллы: 4, доделывайте (до 23.03).

comment:2 Changed 4 years ago by yakovlev.aleksandr

Type: ожидаются исправленияожидается проверка
Version: 1.02.0

55: почему решили принимать аргумент по значению? Ответ напишите в комментарии к тикету;

Тогда компилятор сам определит, замувать аргумент или скопировать

comment:3 Changed 4 years ago by Артур Гулецкий (huletski)

Resolution: задача сдана
Status: assignedclosed

55: почему решили принимать аргумент по значению? Ответ напишите в комментарии к тикету;

Тогда компилятор сам определит, замувать аргумент или скопировать

Зачем вообще нужно мувать/копировать значение в параметр метода fill, учитывая, что метод использует параметр как аргумент копирующей версии Т::op= в цикле? Замена типа параметра на const T& позволяет избавиться от лишнего вызова конструктора копирования/перемещения для инициализации параметра.

Замечания:

my_array.h

  • падает такой тест для специализации:
    template <typename T>
    void test_my_array(const T &val) {
      lab_13::my_array<T, 2> a;
      a.fill(T());
      (a[0] = a[1]) = val;
      assert(a[0] == val);
    }
    
    int main(int, char**) {
      test_my_array(42);
      test_my_array(true);
    }
    
  • падает такой тест:
    lab_13::my_array<bool, 10> a;
    a[1] = true;
    assert(a[1]);
    a[0] = a[1];
    assert(a[0]);
    
  • 114: memset так и не появился

Баллы: 7.5.

Last edited 4 years ago by Артур Гулецкий (huletski) (previous) (diff)
Note: See TracTickets for help on using tickets.