string s;
bool b[] = {s=="", s==s.c_str(), s.c_str()==""};
세트
b[] = {true, true, false};
왜 b[2]
거짓입니까?
경우 A==B
와 A==C
, 그 의미하지는한다 B==C
?
답변
이 표현에서
s.c_str()==""
두 개의 포인터 (주소)가 비교됩니다. 첫 s.c_str()
번째 문자는 반환 한 포인터 이고 두 번째 문자는 문자열 리터럴의 첫 번째 문자 (0 문자 종료)의 포인터 ""
입니다.
주소가 다르다는 것은 명백합니다 (문자열 리터럴에는 정적 저장 기간이 있음을 명심하십시오).
예상되는 결과를 얻으려면 대신 작성해야합니다
std::strcmp( s.c_str(), "" ) == 0
이 두 표현은
s==""
과
s==s.c_str()
표준 클래스 std :: string에 올바른 피연산자에 대해 연산자 ==가 오버로드되었으므로 비교 된 문자열이 있습니다.