Должен ли я запустить ошибку или исправить значения - PullRequest
1 голос
/ 11 апреля 2020

Предположим, мы создаем класс списка с функцией, которая исключает элементы из позиции a в позицию b.

Предполагается, что класс будет использоваться другими программистами (например, std :: list).

Пример:
список значений: {0,1,2,3,4,5,6}, и мы вызываем эту функцию с помощью (begin = 2, end = 5). Это изменит список на {0,1,6}

. Если пользователь вызывает функцию со списком end> ​​size, лучше просто переназначить end = size и удалить до последнего или запустить исключение типа out_of_range?

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

Это хороший вопрос о стандартах программирования. Если кто-то вызывает ваш метод с помощью end> size, он технически идет вразрез с требованиями вашей функции. Возможно, программист вызвал вашу функцию, думая, что сделал что-то еще, например, исключил все значения списка между значениями, которые они дали. Если ваша функция не выдает исключение, они не будут знать, что что-то пошло не так, пока не возникнет логическая ошибка позже. Лучше всего, если заданы неверные параметры, - создавать исключение, объясняя, что они сделали неправильно. Это ставит перед человеком, использующим вашу функцию, более сложную задачу, но в дальнейшем избавляет его от проблем.

0 голосов
/ 11 апреля 2020

Для входного аргумента для rightIndex> list.size () у вас есть несколько вариантов:

  • ОШИБКА: исключение (индекс массива вне диапазона)
  • ПРЕДУПРЕЖДЕНИЕ: rightIndex усекается до конца списка в строке 5: 56
  • ASSERTION FAILED (ошибка): assert (rightIndex> = 0 && rightIndex
  • Ошибка несоответствия ссылок : Ссылка, предоставленная rightIndex, не сопоставляется с функцией deleteBetween (leftIndex, rightIndex) {...}
  • Ошибка сегментации (SIGSEGV): недопустимая ссылка на память и нарушение доступа, попытка чтения или записи из / в область памяти, к которой у вас есть доступ.
...