본문 바로가기
SWE/Qt

QString 비어있는지 확인 | isEmpty()와 isNull()의 차이점

by S나라라2 2020. 11. 2.
반응형

QString에는 isEmpty()와 isNull() 두 가지 함수가 있다.

비슷하듯 달라서 매우 헷갈린다.

둘을 비교해 보자

 

String의 Null과 Empty의 차이점

 

역사적 이유로, QString은 null과 empty를 구별한다. 

 

Null string은 QString이 생성될 때의 초기값이나, (const char *0)으로 전달된 값이다.

 

반면에, Empty string은 문자열의 길이가 0인 것이다.

 

따라서, Null string은 언제나 비어있지만, Empty string은 null이 아닐 수도 있다.

 

 

예제

1. QString이 비어있는 경우

QString().isNull();
QString().isEmpty();

// return true

// return true

 

QString이 비어있기 때문에, isNull()과 isEmpty()는 모두 true를 반환한다.

 

 

2. QString이 ""인 경우

QString("").isNull();
QString("").isEmpty();

// return false

// return true

 

QString이 비어있는 것은 아니기 때문에, isNull()은 false를 반환한다.

문자열의 길이가 0이기 때문에, isEmpty()는 true를 반환한다.

 

 

3. QString이 "abc"인 경우

QString("abc").isNull();
QString("abc").isEmpty();

// return false

// return false

 

QString이 비어있지도 않고, 문자열의 길이가 0도 아니기 때문에,

isNull()과 isEmpty() 모두 false를 반환한다.

 

 

결론

 

isNull()를 제공하는 모든 함수들은 Null string을 empty string과 같은 것으로 취급한다.

 

예를 들면, toAscii().constData()는 문자 '\0'을  가리키는 포인터를 반환한다.

'\0' 문자는 Null string을 의미한다. (Null 포인터가 아님!)

그리고 QString은 QString("")과 같은 것으로 비교한다.

QString string = toAscii().constData();
// string = '\0'을 가리키는 포인터

string.compare("")
// return true

 

따라서 Qt의 공식적인 입장은, isNull()의 사용은 피하고, isEmpty()를 항상 사용하도록 권유한다.

 

 

출처 : Qt 공식 문서

doc.qt.io/qt-5/qstring.html

반응형