我有一个函数foo(const std::string& str);
如果你使用foo(NULL)
调用它会崩溃。
我该怎么做才能防止它崩溃?
答案 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());
这将为函数提供一个空字符串,这可能是你无论如何都会解释你的空值。