I have a function foo(const std::string& str);
that it does crash if 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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With