Инициализация std::string
от указателя NULL
char - это поведение undefined, я считаю. Итак, вот альтернативные варианты конструктора, где mStdString
является переменной-членом типа std::string
:
void MyClass::MyClass(const char *cstr) :
mStdString( cstr ? cstr : "")
{}
void MyClass::MyClass(const char *cstr) :
mStdString(cstr ? std::string(cstr) : std::string())
{}
void MyClass::MyClass(const char *cstr)
{
if (cstr) mStdString = cstr;
// else keep default-constructed mStdString
}
Изменить, объявление конструктора внутри class MyClass
:
MyClass(const char *cstr = NULL);
Какое из них или, возможно, что-то еще, является лучшим или наиболее правильным способом инициализации std::string
с помощью указателя NULL
и почему? Разве это отличается для разных стандартов С++? Предположим, что флаги оптимизации стандартной версии освобождены.
Я ищу ответ с объяснением, почему правильный путь или ответ с ссылкой ссылки (это также применяется, если ответ "не имеет значения" ), а не только личные мнения (но если вы должны, по крайней мере, сделать это просто комментарием).