Development Tip

std :: string 설정 여부를 확인하는 방법은 무엇입니까?

yourdevel 2020. 11. 26. 19:58
반응형

std :: string 설정 여부를 확인하는 방법은 무엇입니까?


를 사용하면로 char*초기화 NULL하고 나중에 비교를 통해 설정되었는지 확인할 수 있습니다. 에 대해 동일한 작업을 수행하는 방법 std::string? 문자열이 설정되었는지 확인하는 방법은 무엇입니까?

편집 : 내가 설정 한 문자열도 비어 있으면 어떻게합니까? std::string설정 여부를 확인하기 위해 추가 플래그를 사용해야 합니까?


사용 empty():

std::string s;

if (s.empty())
    // nothing in s

여러 답변이 지적했듯이, std::string그 가치에 대한 '무효'의 ​​개념이 없습니다. 이러한 값으로 빈 문자열을 사용하는 것이 충분하지 않은 경우 (즉, 문자가없는 문자열과 값이없는 문자열을 구분해야 함) a를 사용 std::string*하여 NULL 또는 a 로 설정할 수 있습니다 . std::string적절한 경우 유효한 인스턴스.

포인터 std::string를 설정하는 모든 개체 의 수명을 관리하는 데 도움이되는 일종의 스마트 포인터 유형 (boost :: scoped_ptr 등)을 사용할 수 있습니다.


당신은 할 수 없습니다. 적어도 포인터가인지 여부를 테스트 할 수있는 동일한 방법은 아닙니다 NULL.

std::string객체는 항상 초기화 항상 문자열을 포함합니다; 기본적으로 내용은 빈 문자열 ( "")입니다.

비어 있는지 테스트 할 수 있습니다 ( s.size() == 0또는 사용 s.empty()).


std :: string의 기본 생성자는 항상 null 문자열로 설정된 객체를 반환합니다.


더 "해제"상태가 위해없는 std::string것이되어, 항상 뭔가 설정합니다.


std :: string 클래스로 말할 수 없다고 생각합니다. 그러나이 정보가 정말로 필요한 경우 항상 std :: string에서 클래스를 파생시키고 파생 된 클래스가 생성 이후 (또는 다른 임의의 시간) 변경되었는지 여부를 알 수있는 기능을 제공 할 수 있습니다. 또는 더 나은 방법은 기본 클래스 가상 소멸자가 없기 때문에 std :: string에서 파생하는 것이 좋은 생각이 아닐 수 있으므로 std :: string을 래핑하는 새 클래스를 작성하는 것입니다. 아마도 더 많은 작업이 필요하지만 최적의 솔루션을 위해서는 더 많은 작업이 필요한 경향이 있습니다.

물론, ""이외의 내용이 포함 된 경우 "설정"된 것으로 가정 할 수 있지만 수동으로 ""로 설정되는 것을 감지하지는 못합니다.

참고 URL : https://stackoverflow.com/questions/3903587/how-to-check-if-a-stdstring-is-set-or-not

반응형