[c++] b [2]가 왜 거짓입니까?

string s;
bool b[] = {s=="",  s==s.c_str(),  s.c_str()==""};

세트

b[] = {true, true, false};

b[2]거짓입니까?

경우 A==BA==C, 그 의미하지는한다 B==C?



답변

이 표현에서

s.c_str()==""

두 개의 포인터 (주소)가 비교됩니다. 첫 s.c_str()번째 문자는 반환 한 포인터 이고 두 번째 문자는 문자열 리터럴의 첫 번째 문자 (0 문자 종료)의 포인터 ""입니다.

주소가 다르다는 것은 명백합니다 (문자열 리터럴에는 정적 저장 기간이 있음을 명심하십시오).

예상되는 결과를 얻으려면 대신 작성해야합니다

std::strcmp( s.c_str(), "" ) == 0

이 두 표현은

s==""

s==s.c_str()

표준 클래스 std :: string에 올바른 피연산자에 대해 연산자 ==가 오버로드되었으므로 비교 된 문자열이 있습니다.


답변