제목만 보면 내용이 어려워보일수 있는데 사실은 어렵지 않다. 다시 정리해보면 private 를 이용해 함수를 숨기지 말고 delete 키워드를 사용하라는 의미이다. 이렇게 고의적으로 함수를 없애는 경우는 우리가 많이 사용하는 싱글턴이나 팩토리 패턴들을 사용하는 경우이니 알아두는것이 좋다. 어떻게 다른지 예제를 보자. class MyObject { // private을 사용하는 경우 private: MyObject(); // delete 키워드를 사용하는 경우 public: MyObject() = delete; }; 여기서 delete 키워드를 사용한 경우에 public으로 사용한 것을 볼 수 있는데 이는 의도적으로 더 나은 오류 메시지를 받기 위함임을 알아두길 바란다. 위의 두 코드의 목적은 똑같다. 외..
C++11에는 별칭 선언(alias declaration)을 제공한다. 별칭 선언이란 typedef를 대체할 수 있으면서 몇가지 장점들이 있다. 먼저 둘의 차이를 보자. typedef std::unique_ptr UPtrMapSS; using UPtrMapSS = std::unique_ptr; typedef보다 별칭 선언을 선호해야하는 이유는 바로 별칭 템플릿(alias templates) 때문이다. template using MyAllocList = std::list; template struct MyAllocList { typedef std::list type; }; 당장 위에만 봐도 별칭 선언을 사용한 경우가 간단하다. 게다가 이를 다른 클래스에서 사용하려면 이름 앞에 typename을 꼭 붙여야한..
객체를 생성하는 방법은 생각보다 다양하다. 아래와 같은 방법이 존재한다. int x(0); int y = 0; int z{ 0 }; int z = { 0 }; 위의 4가지 방법 모두 똑같은 결과를 나타낸다. 그 중에서 중괄호({})로 나타낸 생성 방법을 바로 균일 초기화(uniform initialization)이라고 한다. 균일 초기화 도입 배경 균일 초기화라고 부르는 이유는 어떤 상황에서든 균일하게 초기화를 할 수 있기 때문이다. 균일 초기화를 도입하게 된 3가지 배경을 먼저 알아보자. 컨테이너 초기화 vector와 같이 배열의 경우 초기 값들을 지정할 수 있다. std::vector v{ 1, 3, 5 }; // v의 원소는 1, 3, 5 멤버 초기화 non-static 자료 멤버를 초기화 하는데 ..
FPS나 TPS 게임를 만들때 위의 함수를 자주 사용하곤 한다. 언리얼 공식 도큐먼트에서도 위의 함수를 사용하는 것을 볼 수 있다. https://docs.unrealengine.com/ko/Programming/Tutorials/FirstPersonShooter/2/3/index.html 2.3 - 캐릭터 동작 함수 구현 일인칭 슈팅 캐릭터에 대한 동작 함수 구현법을 배워봅니다. docs.unrealengine.com 이 함수가 무엇을 의미하는지 알아보자. FRotator 이 함수의 반환타입은 FRotator 이다. FRotator 는 3개의 값을 가지고 있는데 Pitch, Roll, Yaw 이다. 이 용어는 바로 오일러 축(Euler angle)에서 들어본 용어일 것이다. 이 3개의 값은 각각 y, ..
이전 포스트에서는 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..
- Total
- Today
- Yesterday
- 보편참조
- detach
- 람다
- async
- auto
- std::move
- forward
- CPP
- C++11
- Modern
- Join
- Effective
- C++
- Override
- 보편 참조
- Forwarding
- C++14
- Future
- Overloading
- thread
- Effective Modern C++
- 다이소
- std::forward
- 발아시기
- const
- Perfect
- C
- MOVE
- 포인터
- Unreal
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |