이전 포스트에서는 auto 를 써야하는 이유를 보았다면 이번 글에서는 auto 를 사용할 때, 주의해야하는 점을 알아보도록 하자. std::vector::reference vector::reference 가 무엇인지 아는 사람은 드물것이다. 먼저 vector 에 대해 생각해보자. bool 형식을 원소로 갖는 배열을 의미한다. 여기서 bool 의 특징을 생각해보자. bool 은 true, false 만 저장하는데도 속도를 위해 1byte 의 크기를 갖고 있다. 그런데 우리는 bool 배열을 사용할 것이기 때문에 굳이 1byte만 사용하지 않아도 된다. 1bit에 1개의 원소를 저장해도 아무런 문제가 없다. 이를 bool 처럼 사용하게 해주는 컨테이너가 바로 vector::reference 이다. 여기서 a..
처음 C++ 에서 auto 라는 키워드를 알게 되었을 때, 'auto가 있어서 편하다' 라는 생각보다는 왜 필요한지 의문이 든 적이 있을 것이다. 타입을 알아서 지정해준다는 장점 하나만으로 쓰기에는 auto를 사용함으로써 타입을 알아내기 힘들다는 생각이 들게된다. 대표적으로 처음 javascript 나 python 을 사용하게 되면 타입을 알지 못해 생기는 귀찮은 일들이 생긴다. 그러나 auto 는 이를 감수할 충분한 가치가 있다. 어떠한 장점들이 있는지 알아보자. 초기화를 빼먹는 실수 종종 생길 수 있는 실수로 선언만하고 초기화를 하지 않는 경우가 생길 수 있다. 이런 실수 때문에 예상치 못한 문제들이 발생할 수 있어 항상 조심해야한다. 그런데 만약 auto를 사용했다면 컴파일러가 에러를 발생시켜 실수..
이번 항목에서는 연역된 형식이 무엇인지 궁금할 때, 형식을 알아내는 방법에 대해서 소개한다. 예를 들면 auto를 사용하는 경우인데 이를 알아내기란 쉽지가 않다. 이 책에서는 형식을 알아낼 수 있는 3가지 방법을 소개했다. IDE 편집기 컨파일러의 진단 메시지 실행시점 출력 IDE 편집기 좋은 IDE를 사용하고 있다면 현재 연역된 형식이 무엇인지 알려준다. 일반적으로 타입에 마우스를 올려두기만 하면된다. 그러나 복잡한 형식에서는 IDE가 알려주지 못할 수도 있다. 컨파일러의 진단 메시지 decltype 과 template 을 이용해서 컨파일러 에러를 통해 알아내는 방법이다. 방법은 다음과 같다. template class TD; TD xType; // 컴파일 에러 TD yType; // 컴파일 에러 xT..
decltype 이라는 키워드는 객체가 주어졌을때, 그 객체의 타입을 알려준다. 예시를 보자. const int i = 0; // decltype(i)는 const int MyClass object; // decltype(object)는 MyClass 위와 같이 객체의 타입을 알려주는데, 가끔 생각한대로 동작하지 않는 경우가 있다. 특이한 작동 방식 먼저 코드를 보자. template auto authAndAccess(Container& c, Index i) -> decltype(c[i]) { authenticateUser(); return c[i]; } 위에서 보이는 함수처럼 auto 와 decltype 을 이용한 방식을 후행 반환 형식이라고 한다. 후행 반환 형식으로 선언한 함수의 반환 타입은 dec..
auto 의 형식 연역 규칙은 template 과 거의 모든 부분이 일치한다. 그러므로 항목 1을 먼저 보기를 추천한다. https://pppgod.tistory.com/14 불러오는 중입니다... template 과 차이가 생기는 부분은 바로 균일 초기화(Uniform initialization)를 사용하는 경우이다. int x1 = 27; int x2(27); int x3 = { 27 }; // Uniform initialization int x4{ 27 }; // Uniform initialization 여기서 int 를 auto 로 변경해보자. auto x1 = 27; // int auto x2(27); // int auto x3 = { 27 }; // std::initializer_list au..
우리가 STL을 사용하게 되면 많은 곳에서 템플릿 형식을 접하게 된다. 그러나 템플릿 형식의 타입이 결정되는지는 잘 알지 못한다. 항목 1에서 타입이 어떻게 연역 되는지 알아보도록 한다. 이 책에서는 템플릿 형식이 연역되는 규칙을 3가지로 분류하였다. 연역 규칙규칙 3가지는 다음과 같다. ParamType이 포인터 또는 참조 형식이지만 보편 참조는 아님 ParamType이 보편 참조임 ParamType이 포인터도 아니고 참조도 아님 규칙들을 정리하기 전에 보편 참조라는 생소한 용어가 보일 것이다. 여기서 말하는 보편 참조란 && 를 말한다. 우측값 참조와 쓰는 형태가 같지만 auto 나 template 에서는 보편 참조라고 부른다. 그 이유는 보편 참조는 우측값 참조이거나 혹은 왼값 참조일수도 있기 때문..
- Total
- Today
- Yesterday
- Future
- Effective Modern C++
- 다이소
- std::forward
- MOVE
- 보편참조
- 보편 참조
- Perfect
- 포인터
- C++
- const
- C
- C++14
- auto
- Join
- CPP
- 람다
- async
- thread
- C++11
- detach
- Effective
- Modern
- Overloading
- Forwarding
- Unreal
- Override
- 발아시기
- forward
- std::move
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |