Как разрешить параметр std: string быть NULL?

У меня есть функция foo(const std::string& str);, которая сработает, если вы вызываете ее с помощью foo(NULL).

Что я могу сделать, чтобы предотвратить его сбой?

Ответ 1

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
}

Ответ 2

Вы можете использовать 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 дает вам типичный способ иметь значения с нулевым значением, не прибегая к указателям и связанным с ними проблемам.

Ответ 3

У вас есть функция, которая принимает std::string, поэтому укажите std::string, а не указатель.

foo(std::string());

Это обеспечит функцию пустой строкой, которая, вероятно, вы бы так или иначе интерпретировали ваше значение.