How to allow a std:string parameter to be NULL?
I have a function foo(const std::string& str);
that it does crash i开发者_如何学Gof you call it using foo(NULL)
.
What can I do to prevent it from crashing?
std::string has a constructor that takes a const char* parameter. That's constructor is going to crash when you pass NULL to it, and that constructor is called implicitly when you write foo(NULL).
The only solution I can think of is to overload 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
}
You could use 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
}
}
To call it with a string:
string s;
func(optional<string>(s));
and without a string:
func(optional<string>());
Boost.Optional gives you a typesafe way to have nullable values without resorting to pointers and their associated problems.
You have a function that accepts a std::string
, so provide it an std::string
, not a pointer.
foo(std::string());
This will provide the function with an empty string, which is probably what you would have interpreted your null value as anyhow.
精彩评论