Как сделать проверку данных элегантным способом при написании функций C ++? - PullRequest
0 голосов
/ 13 марта 2012

Я новичок в C ++, я не знаю, как проверить правильность ввода, может ли кто-нибудь мне помочь? Например. У меня есть функция,

int foo(int p, int r) {
  if (p < r) {
    .....
  }
}

в этой функции p должно быть меньше r; но когда p> = r, что я должен вернуть? или выдать исключение, как при использовании Java?

Спасибо!

Ответы [ 3 ]

1 голос
/ 13 марта 2012

Это решение, которое вам нужно принять. Вопрос в том, «Как мне поступить с неверными аргументами?»

Ответы могут быть:

  1. Игнорировать их. Заставьте код работать независимо. Это будет означать, что вам нужно учитывать, какие значения возвращать при предоставлении неверных данных, как в вашем примере кода.
  2. Сделайте так, чтобы ваш код выкрикнул, чтобы вы знали, когда это произошло, и можете исправить это тогда и там.

    • Утверждение является самым простым.
    • Исключения - это другой выбор.

Если вы сомневаетесь, выберите самый простой подход для ваших текущих потребностей, потому что вы не можете надежно предсказать, какими будут ваши будущие потребности. Так что в этом случае я бы пошел с утверждением.

Причина в том, что лучший способ решить проблему - это предотвратить ее возникновение. Утверждения имеют большое значение для предотвращения возникновения проблемы, поскольку они заставляют вас, разработчика, немедленно с ними справиться.

1 голос
/ 13 марта 2012

Это те решения, которые вы принимаете на основе логики вашего приложения. В c ++ 0 означает false, а все, кроме 0, означает true. В противном случае вы могли бы assert заявление в C ++ Выбор остается за вами. Вы можете включить эту логику в свое приложение, чтобы фактически обрабатывать ситуации, которые вы упомянули. Но однозначный ответ на ваш вопрос всегда

0 голосов
/ 13 марта 2012

Если вы спрашиваете о хороших способах выявления этих ошибок, утверждения очень полезны.http://www.cplusplus.com/reference/clibrary/cassert/assert/

int Foo(int p, int r)
{
   assert (p < r);
   if (p < r)
   { ... }
}

Когда вы запускаете этот код, ваш код будет кричать на вас, и вы знаете, что данные были испорчены.Вы даже можете заскочить и понять, почему это не так.

Существует множество других способов обработки ошибок в c ++.Я считаю, что операторы Try / Catch были добавлены много лет назад, если вы предпочитаете их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...