---
title: "C++ ->, ., ::의 차이"
date: "2021-12-24"
tags: ["TIL"]
status: archived
verified: false
---

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

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

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

```c++
if (somevar.isEmpty())  // 잘못 수정
{
  ...
}

if (somevar->IsEmpty()) // 재수정
{ 
  ...
}
```

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

### ->

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

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

### .

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

```c++
Foo foo;
foo.member_var = 10;
foo.member_func();
```

### ::

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

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

---

### 참고
* [stackoverflow - What is the difference between "::" "." and "->" in c++](https://stackoverflow.com/a/11902837)
