возвращение NULL-строки из функции c ++ - PullRequest
4 голосов
/ 27 мая 2011

string receiveFromServer();

эта функция возвращает строку, полученную с какого-либо сервера. Если по пути произошла ошибка (включая протокол), я хочу вернуть пустую строку. Тем не менее, это не работает в C ++ (в отличие от Java). я попробовал:

string response = receiveFromServer();
if (response==NULL) {
    cerr << "error recive response\n";
}

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

спасибо!

Ответы [ 5 ]

9 голосов
/ 27 мая 2011

Вы можете выдать исключение, чтобы указать на ошибку.

try {
    std::string response = receiveFromServer();
} catch(std::runtime_error & e) {
    std::cerr << e.what();
}

Тогда вам понадобится throw std::runtime_error("Error receive response") где-то в receiveFromServer().

Часто считается хорошей практикой (хотя некоторые могут и не согласиться) создавать собственные классы исключений, которые являются производными от std::runtime_error, чтобы позволить клиентам специально определять ваши ошибки.

5 голосов
/ 27 мая 2011

Вы можете либо сгенерировать исключение (лучший способ), либо вернуть boost :: необязательный , но тогда вам нужно проверить, верно ли возвращаемое значение (это на самом деле хуже).

1 голос
/ 27 мая 2011

Может быть, вам стоит попробовать обработать с исключениями

 try
  {
    string response = receiveFromServer();
  }
  catch (...)
  {
    cerr << "error recive response\n";
  }
1 голос
/ 27 мая 2011

NULL имеет значение только при использовании указателей. В Java-строки указатели, так что вы можете сделать это.

В C ++, если вы возвращаете std :: string, она должна существовать. Итак, у вас есть несколько возможностей

  • Брось исключение
  • Вернуть пару с булом, указывающим на успех
  • Вернуть пустую строку
  • Используйте указатель (я настоятельно не рекомендую эту опцию)
0 голосов
/ 27 мая 2011

Если вы хотите вернуть пустую строку, вы также можете использовать функцию string::empty(), чтобы проверить, является ли она пустой

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