노트

c++) 객체의 == 비교

tose33 2022. 12. 20. 21:28

자바에서 == 비교는 객체의 레퍼런스를 비교한다.

두 객체가 같은 값을 갖고 있어도 다른 레퍼런스를 갖으면 서로 다르고 == 비교 했을때 false이다.

예를들어 아래의 결과는 false 다. 

Member member1 = new Member("member");
Member member2 = new Member("member");

System.out.println(member1 == member2);

 

java를 쓰다가 갑자기 c++에서 어땠는지 기억이 안났다;

그래서 직접해봤는데

 

아래 cpp 코드는 (member1 == member2) 부분에서 컴파일 에러가 난다. 

#include <iostream>
#include <vector>
using namespace std;

class Member {
    string name;

public:
    Member(const string &name) : name(name) {}
};

int main(){
    Member member1 = Member("m1");
    Member member2 = Member("m1");

    cout << (member1 == member2);

}

 

이게 기억이 잠깐 안났었는데 c++에서는 연산자 오버로딩이란게 있어서 Member 클래스에 == 오버로딩이 안되어 있기 때문에 == 에서 컴파일 에러가 난다. 

 

== 로 비교를 하려면 해당 클래스에 == 연산자 오버로딩으로 정의가 되어있어야 한다.

 

 

또 자주 쓰는 컨테이너인 vector가 궁금해서 찾아봤는데 vector의 == 연산자 오버로딩은 값에 대해 비교한다.

즉 두 벡터가 크기가 같고, 같은 값들을 같은 순서로 갖고 있다면 == 연산시 true를 리턴한다.