아티클 목록

C++ ->, ., ::의 차이

C++ ->, ., ::의 차이

동일한 개발 내용을 C++ 제품에 포팅했는데 다르게 동작하는 문제가 발생해서 엉뚱한 곳에서 한참 찾았다..

원인은 허무하게도 메서드를 잘못 호출해서 발생한 문제였다. (빌드 에러도 안나서 잘못 고친줄 몰랐다)

if (somevar.isEmpty())  // 잘못 수정
{
  ...
}
 
if (somevar->IsEmpty()) // 재수정
{ 
  ...
}

JS개발만 하다보니 ->, ., ::의 차이를 정확히 몰라 이번 기회에 정리해본다.

->

포인터를 통해 객체 멤버 변수나 메서드에 접근할 때 사용

Foo *foo = new Foo();
foo->member_var = 10;
foo->member_func();

.

객체 인스턴스를 통해 객체 멤버 변수나 메서드에 접근할 때 사용

Foo foo;
foo.member_var = 10;
foo.member_func();

::

클래스나 구조체 또는 네임스페이스의 스태틱 변수나 메서드에 접근할 때 사용

int some_val = Foo::static_var;
Foo::static_method();
int max_int = std::numeric_limits<int>::max();

참고

댓글