[C++] 변수를 읽어보자 Lu's…〃 Programing。

 C++ 어렵게 하는 요소 중에는 변수를 읽는 방법이 난해하다는 점이 있고, 비중은 것이다.

 

 변수를 읽는 법은 입문 직후가 아니라 어느 정도 C++ 했다 싶은 사람들의 발목을 잡는다. 입문자는 int* 무엇인지 모르지만 이건 포인터를 모르는 거지 이를 읽는 방법을 모르는 것이 아닐 것이다.

 

 예를 들어보자. 포인터로 int 타입의 값을 인자로 넘겨받아 확인하고 싶다. 참조하는 값을 변경하고 싶지 않아서 const 붙이려고 한다. 어떻게 써야 할까?

 

  1. const int *
  2. int * const
  3. int const *
  4. int const * const

 

 정답은 2번을 제외한 전부이다. 결론만을 말하자면, 1번과 3번은 완전히 동일한 타입이고 4 역시 참조만 목적이면 사용이 가능하다.
 

 

 

 변수를 읽는 방법은 생각보다 간단하다. 변수 이름을 적는 오른쪽부터 왼쪽으로 읽어가면 된다. 구분은 참조(&) 포인터(*) 단위로 하고, cv-identifier(const / volatile) 타입의 또는 뒤에 자유롭게 온다.

 

예를 들어, const char * const * A; 같은 미친 문법이 있다. 실제로 이런 문법을 쓰지는 않지만. A 타입을 읽으면 다음과 같다.

 

 A 포인터(인데, 어떤 타입의 포인터냐면) const 타입의 포인터(인데, 어떤 타입의 포인터냐면) const char 타입.

 

 이해가 가지 않는가? 그러면 C++11 using(아니면 typedef) 사용해서 구체화해보자.

 

using Type = const char;

using TypePtr =Type*;

using constTypePtr =const TypePtr;

using Ty = constTypePtr*;

 

Ty B;

 

B 타입은 const char* const * 된다. A 동일하게 되는 것이다.

예제는 일부러 많이 나누기도 했지만, 너무 복잡하고 타입은 using으로 간략화 하는 편이 정신건강과 생산성을 챙기는 방법이 것이다




덧글

  • ㅇㅇ 2017/10/10 12:10 # 삭제 답글

    C/Cpp의 expression들은 여러모로 읽기가 불편하긴 하죠
  • 커부 2017/10/10 21:14 # 답글

    제가 대충공부해서도 있겠지만 const 쓰는 위치가 많아서 매번 헷갈리네요..막상 잘 안쓰는것 같기도 히고 ㅠㅠ
  • 루사인。 2017/10/10 21:49 #

    변수읽는 순서를 알려주는 입문서를 본 적이 없어요. 대충 공부한 게 아니더라도 처음에는 많이 헷갈릴 수 있죠. const는 나중에 쓸 필요가 있는데 읽는 방법을 모르면 의도대로 되지 않아 귀찮고 당황스럽죠.
댓글 입력 영역