How to allow a std:string parameter to be NULL?

前端 未结 3 1315
臣服心动
臣服心动 2021-01-17 22:21

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 cras

相关标签:
3条回答
  • 2021-01-17 22:40

    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.

    0 讨论(0)
  • 2021-01-17 22:44

    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.

    0 讨论(0)
  • 2021-01-17 22:52

    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
    }
    
    0 讨论(0)
提交回复
热议问题