NULL
char 포인터에서 초기화 std::string
포인터는 정의되지 않은 동작입니다.NULL char 포인터에서 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
내부 생성자 선언 : 그래서, 여기에 mStdString
유형 std::string
의 멤버 변수 인 생성자의 대체 버전입니다 다른
MyClass(const char *cstr = NULL);
이들의
, 또는 아마도 뭔가, 가능하면 NULL
포인터에서 std::string
을 초기화하는 가장 좋은 또는 가장 적절한 방법은 무엇입니까? C++ 표준마다 다른가요? 정상적인 릴리즈 빌드 최적화 플래그를 가정합니다.
이유가 올바른 방법 인 이유에 대한 설명이나 참조 링크가있는 답변에 대한 답변을 찾고 있습니다. (개인 의견뿐만 아니라 대답이 "중요하지 않은 경우에도 적용됩니다" 그러나 꼭해야한다면, 적어도 코멘트로 만드십시오).
모두 nullptr을 원하는대로 결정합니다. 빈 문자열과 같습니까? 아니면 다른 의미를 가져야합니까? – PlasmaHH
문자열의 생성자를 한 번만 호출하기 때문에 첫 번째 옵션을 사용해야한다고 생각합니다. – Alexis
@PlasmaHH 글쎄, 그것은 코드 포인터가 NULL 일 때 코드 스 니펫이하는 일을하고 싶습니다. – hyde