#993 closed ожидается проверка (задача сдана)
WW #15
Reported by: | Igor Engel | Owned by: | Egor Suvorov |
---|---|---|---|
Component: | WW_linq | Version: | 1.0 |
Keywords: | Cc: |
Description
Change History (4)
comment:1 Changed 4 years ago by
Owner: | changed from Egor Suvorov to Igor Engel |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 4 years ago by
Owner: | changed from Igor Engel to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
В лс договаривались о продлении
Вроде добавил, и apple clang и g++ (собранный руками) компилят.
Вроде навесил везде где возможно
Позапрещал
Оставлю пожалуй
Ок
Ок
Ух... Пусть остаётся так...
Ок
Упростил
comment:3 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Корректность 6.2/7:
- Не хватило инклуда для
<cassert>
- Ещё как минимум не хватает
<cstddef>
дляstd::size_t
и<vector>
. Конкретно у меня это тоже не крэшится, но вообще надо. - Можно грепнуть
std::
. Ещё бывает IWYU. А вообще тут скорее не компилятор нужно перебирать, а стандартные библиотеки. Типа stdlibc++ и libc++, они обычно с компиляторами связаны, правда.
Стиль 2.5/3:
bool(x)
(functioncal cast expression) -->static_cast<bool>(x)
, пожалуйста, иначе это C-style-cast, т.е. жуть какая-тоRangeSequence::operator++
: очень несимметричныйif
. Вообще лучше всегда писать на разных строчках (иначе плохо читается по диагонали), но тут ещё и скобки неконсистентно расставлены.- Итераторы в конструкторе
RangeSequence
лучше тоже мувать. Они, конечно, не должны быть большие, но код всё-таки обобщённый. if(
— пробел.- Немного путанный
assert(*this)
вoperator*
везде. Он, конечно, по делу, но не всегда ясно, зачем. Например, вDropSequence
там скорееassert(input)
.- А в
SelectSequence
вообще неясно, зачем там связываются*this
иcur_value.has_value()
.
- А в
comment:4 Changed 4 years ago by
А, кхм, забыл запустить решение. Падает со страшной силой на пустых векторах, например:
linq_tests: ../../../cpp19/engel.igor/lab_15/include/linq.hpp:96: virtual Sequence<linq::impl::RangeSequence::T> &linq::impl::RangeSequence<std::__1::__wrap_iter<int *> >::operator++() [Iter = std::__1::__wrap_iter<int *>]: Assertion `*this' failed.
Это всё-таки не больше 4.5/7 за корректность. То есть 7/10 в сумме, а тогда выгоднее оставить предыдущий балл: 7.75/10.
Note: See
TracTickets for help on using
tickets.
Корректность: 6/7
move
,iterator_traits
и ещё много чего.Стиль 1.75/3:
explicit
(конструктор и оператор),noexcept
, rvalue-ref-qualifier у методов.Sequence
стоит запретить копирование и перемещение — это точно ошибки. Перемещение можно запрещать, начиная с C++17 из-за copy elision.enumerator
-->Sequence
решение стало сильно отличаться от выданной заглушки, что усложнило проверку и я её отложил.Sequence
я бы оставил прямо внутриSequence
. Да и у остальных классов тоже. Они очень маленькие, с полями тесно связаны, хочется класс читать целиком. Заодно будет легче следить, что принятие параметров по ссылке/значению — это ровно то, что надо.O=T
— пробелы, пожалуйста.RangeSequence
со ссылками сложно. С одной стороны логичнее писатьiterator_traits::const_reference
(потому что мало ли что внутри итератора лежит), но тогда надо это дело протаскивать через весьSequence
. Например, сделав там параметр неT
, аconst_reference
везде.if (*this)
вoperator++
лучше ужassert(*this);
UntilSequence::terminated
какой-то сложный: он мутируется по сложным условиям и всё равно вoperator bool
требуется ещё одно условие.