如何允许std:string参数为NULL?

时间:2011-07-30 16:00:24

标签: c++ std

我有一个函数foo(const std::string& str);如果你使用foo(NULL)调用它会崩溃。

我该怎么做才能防止它崩溃?

3 个答案:

答案 0 :(得分:11)

std :: string有一个构造函数,它接受一个const char *参数。当你向它传递NULL时,构造函数会崩溃,并且当你编写foo(NULL)时会隐式调用该构造函数。

我能想到的唯一解决方案是重载foo

void foo(const std::string& str)
{
  // your function
}

void foo(const char* cstr)
{
  if (cstr == NULL)
    // do something
  else
     foo(std::string(cstr)); // call regular funciton
}

答案 1 :(得分:8)

您可以使用Boost.Optional

#include <boost/optional.hpp>
#include <string>

using namespace std;
using namespace boost;

void func(optional<string>& s) {
    if (s) {  // implicitly converts to bool
        // string passed in
        cout << *s << endl; // use * to get to the string
    } else {
        // no string passed in
    }
}

用字符串调用它:

string s;
func(optional<string>(s));

并且没有字符串:

func(optional<string>());

Boost.Optional为您提供了一种类型安全的方法来获取可为空的值,而无需借助指针及其相关问题。

答案 2 :(得分:1)

您有一个接受std::string的函数,因此请提供std::string,而不是指针。

foo(std::string());

这将为函数提供一个空字符串,这可能是你无论如何都会解释你的空值。