从函数c ++返回NULL字符串

时间:2011-05-27 09:07:36

标签: c++ string

string receiveFromServer();

此函数返回从某个服务器收到的字符串。如果一路上出现错误(包括协议),我想返回一个NULL字符串。但是,这在c ++中不起作用(与java不同)。 我试过了:

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

但它不合法。 由于空字符串也是合法的返回,我可以返回什么表明错误?

谢谢你!

5 个答案:

答案 0 :(得分:9)

您可以抛出异常以指示错误。

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,以使客户能够专门捕获您的错误。

答案 1 :(得分:5)

你可以抛出一个异常(更好的方法),或者返回boost :: optional&lt;字符串&gt;,但是你必须检查返回值是否有效(这实际上更糟)。

答案 2 :(得分:1)

NULL在使用指针时只有意义。在java中,字符串是指针,所以你可以这样做。

在C ++中,如果返回std :: string,它必须存在。所以你有一些可能性

  • 抛出异常
  • 返回一对表示成功的bool
  • 返回一个空字符串
  • 使用指针(我强烈反对该选项)

答案 3 :(得分:1)

也许你应该尝试处理with exceptions

 try
  {
    string response = receiveFromServer();
  }
  catch (...)
  {
    cerr << "error recive response\n";
  }

答案 4 :(得分:0)

如果要返回空字符串,也可以使用该函数 string::empty()来测试它是否为空