Информация об изменениях

Сообщение Re: Непустой выходной параметр - ваша реакция? от 24.03.2017 9:28

Изменено 24.03.2017 9:31 AlexGin

Re: Непустой выходной параметр - ваша реакция?
Здравствуйте, Basil2, Вы писали:

B>Есть функция:

B>
B>result_code GetSomething(vector<Something>& output);
B>


B>При одном из вызовов функции передается непустой вектор. Как, на ваш взгляд, функция должна отреагировать на это?


B>1. Всегда очищать (лишнее действие, что не в духе плюсов).

B>2. Игнорировать, т.е. новые значения добавятся к старым ("не очистил сам дурак" — вполне в духе, но добавляет нестабильности).
B>3. Должен сработать assert (типа assert(output.empty)).
B>4. Вернуть ошибку/бросить исключение.
B>5. Оставлю комментарий со своим вариантом.

B>(Хотел сделать настоящее голосование, но получаю "500 — Internal server error". Зато здесь можно обсудить более развернуто).


B>Что скажете?


ИМХО всё зависит от условий задачи/проекта.
Так, если мы только заполняем получаемыми значениями, то можно первоначально дать очистку вектора.
Если же GetSomething может что-то добавлять — то очистку делать не следует.
Остальные варианты — представляются не актуальными для данного случая.
Re: Непустой выходной параметр - ваша реакция?
Здравствуйте, Basil2, Вы писали:

B>Есть функция:

B>
B>result_code GetSomething(vector<Something>& output);
B>


B>При одном из вызовов функции передается непустой вектор. Как, на ваш взгляд, функция должна отреагировать на это?


B>1. Всегда очищать (лишнее действие, что не в духе плюсов).

B>2. Игнорировать, т.е. новые значения добавятся к старым ("не очистил сам дурак" — вполне в духе, но добавляет нестабильности).
B>3. Должен сработать assert (типа assert(output.empty)).
B>4. Вернуть ошибку/бросить исключение.
B>5. Оставлю комментарий со своим вариантом.

B>(Хотел сделать настоящее голосование, но получаю "500 — Internal server error". Зато здесь можно обсудить более развернуто).


B>Что скажете?


ИМХО всё зависит от условий задачи/проекта.
Так, если мы только заполняем получаемыми значениями, то можно первоначально дать очистку вектора.
Если же GetSomething может что-то добавлять — то очистку делать не следует,
тогда логичнее назвать этот метод/функцию: Add... или Append...

Остальные варианты — представляются мне не актуальными для данного случая.