Opened 4 years ago

Closed 4 years ago

#883 closed ожидаются исправления (задача сдана)

WW #13

Reported by: Igor Engel Owned by: Sokolov Viacheslav
Component: WW_array Version:
Keywords: Cc:

Description


Change History (4)

comment:1 Changed 4 years ago by Sokolov Viacheslav

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

9 class my_array {
final?

на самом деле все методы стоит пометить, как constexpr

27 T data[N] = {};

/ = {} противоречит условию (просят оставить неинициализированной)

36 Proxy(const Proxy<HolderT>&) = default;

а rvalue?

57 const_reference at(std::size_t index) const;

кажется, лучше вернуть просто bool

49 constexpr static std::size_t N_holder = (N + holder_size - 1) / holder_size;
может переполниться при большом N

47 using holder = std::size_t;

my_array должен занимать N/8 байт в памяти (с округлением вверх),

10 template<typename T, std::size_t N>
11 auto my_array<T, N>::operator[](std::size_t index) -> reference {
12 return data[index];
13 }

assert все же не помешает

22 if(index >= N) throw std::out_of_range("my_array::at");

сообщение об ошибке можно сделать более информативным, дополнив его информацией об индексе

93 return (*data) & (1 << index);

1 - это signed (int), лучше делать явный каст к нужному (unsigned) типу

99 if(val) {

100 (*data) |= (1 << index);
101 } else {
102 (*data) &= ~(1 << index);
103 }
возможно, эта реализация медленнее, чем без if (потенциально другой набор ассемблерных инструкций)

comment:2 Changed 4 years ago by Igor Engel

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

Всё поправил

comment:3 Changed 4 years ago by Sokolov Viacheslav

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

╰─>$ make
mkdir -p obj
g++ -O2 -g -Wall -Werror -Wextra -std=c++17 -Iinclude -c -MMD -o obj/smoke_compile.o src/smoke_compile.cpp
g++ -O2 -g -Wall -Werror -Wextra -std=c++17 -Iinclude -c -MMD -o obj/main.o src/main.cpp
In file included from include/my_array.h:77,

from src/main.cpp:1:

include/my_array.hpp: In function ‘void test_something()’:
include/my_array.hpp:105:26: error: ‘b’ may be used uninitialized in this function [-Werror=maybe-uninitialized]

105 | (*data) = (*data & ~(ONE << index)) | (static_cast<holder>(val) << index);

| ~~

cc1plus: all warnings being treated as errors
Makefile:20: recipe for target 'obj/main.o' failed
make: * [obj/main.o] Error 1

╰─>$ make
mkdir -p obj
g++ -O2 -g -Wall -Werror -Wextra -std=c++17 -Iinclude -c -MMD -o obj/smoke_compile.o src/smoke_compile.cpp
g++ -O2 -g -Wall -Werror -Wextra -std=c++17 -Iinclude -c -MMD -o obj/main.o src/main.cpp
g++ obj/smoke_compile.o obj/main.o -o lab_13
obj/main.o: In function `test_something()':
/usr/include/c++/9/ext/string_conversions.h:99: multiple definition of `test_something()'
obj/smoke_compile.o:/home/nicesap/HSE/svn/engel.igor/lab_13/src/smoke_compile.cpp:36: first defined here
obj/main.o: In function `main':
/usr/include/c++/9/bits/basic_string.h:157: multiple definition of `main'
obj/smoke_compile.o:/home/nicesap/HSE/svn/engel.igor/lab_13/src/smoke_compile.cpp:68: first defined here
obj/main.o: In function `std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > gnu_cxx::to_xstring<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char>(int (*)(char*, unsigned long, char const*, va_list_tag*), unsigned long, char const*, ...)':
/usr/include/c++/9/bits/char_traits.h:363: multiple definition of `lab_13::throw_out_of_range_error(unsigned long, unsigned long)'
obj/smoke_compile.o:/home/nicesap/HSE/svn/engel.igor/lab_13/include/my_array.hpp:11: first defined here
collect2: error: ld returned 1 exit status
Makefile:17: recipe for target 'lab_13' failed
make: * [lab_13] Error 1

comment:4 Changed 4 years ago by Sokolov Viacheslav

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

А, это какие-то мои локальные артефакты

Note: See TracTickets for help on using tickets.