그동안 C++을 하면서 느낀 건, 몇 십줄 설명하는 것보다 그냥 코드를 보여주는 게 더 낫다는 것이었다. 그러므로 실행 성공한 코드를 먼저 올린다. #include using namespace std; enum class ElementType { Position3D, Color }; template class Vertex { private: void Process(ElementType t) { cout
Programming
절두 절미 하고 샘플 코드 부터 보여주도록 한다. #include using namespace std; class A { public: virtual void P() { cout
HashMap 자료구조를 가지고 만든 컨테이너들이다. 공간을 많이 쓰게 되지만 탐색속도가 1이고, 마치 검색을 하듯 찾을 수 있어서 좋다. 내가 일단 습득한 사용법에 대해서만 서술한다. 먼저 std::unordered_map은 key -> value에서 key값의 중복이 불가능하다. std::unordered_map container; 일단 이런 식으로 2개의 자료형을 pair로 구성하여 인스턴스화 할 수 있다. 그 다음은 딱 2가지만 파악하면 웬만한 건 다 할 수 있다. 1. insert를 하는 법. 2가지 방법이 있다. 심플하게 마치 자바스크립트를 쓰는 것 처럼 MyClass instance; container["My Class"] = instance; 요런 식으로 삽입이 가능하다. 그 다음은 ins..
get()을 통해 얻은 포인터가 있다고 해보자. T* ptr = unique_ptr.get(); 만약 ptr을 delete하면 어떻게 될까? delete ptr; ptr->Foo(); 결과는 잘 동작한다. unique_ptr로 만들고 get()을 통해 포인터를 얻어온다면 unique_ptr만이 이 포인터의 소멸을 책임진다. 근데 디버그 모드에서는 뭔가 문제가 있다고 알려주긴 한다.
constexpr는 기본적으로 const와 같은 상수 값을 의미한다. 그러면 왜 const가 아니라 constexpr을 써야하는 가, 이걸 써주면 만약 constexpr int 를 리턴하는 함수가 다음과 같이 있다고 할 때, constexpr double Square(const double x) { return x * x; } int main() { constexpr double i = Square(3.141592653); } i의 값은 컴파일 타임에 미리 계산이 되므로 실행 후에 Square 함수가 실행되어 값을 i에게 전달하는 것이 아니라 미리 상수로 정의 되도록 만들 수 있다. 이외에 어떤 이점이 있는지는 공부가 되는 대로 또 추가할 것이다.
해당 함수는 예외를 발생시키지 않습니다~ 라고 선언해주는 일종의 연산자이다. 다음과 같이 쓸 수 있다. void Foo() noexcept {} 이걸 써주면 무슨 이득을 보느냐, 컴파일 최적화도 그 이유이긴 하지만 지금까지 난 이걸 안쓰고서 살았음에도 체감을 못했다. 즉, 별로 직접적인 체감이 안된단 얘기다. 골을 울릴만 한 엄청난 이유가 숨어있어야 귀찮은 거 감수하고 쓰지 않겠는가? 그래서 그 이유를 열심히 찾아보도록 한다. 이는 copy semantics와 move semantics와 관련 있다고 한다. 이동 연산이 뭔지 모르므로 공부후 추가하자...
예를 들어 다음과 같이 선언했다고 하자. int main() { int a[4]; int b = a[4]; } 초반에 많이 했던 실수다. a[4]라고 선언하면 a[0] ~ a[3] 까지만 인덱스로 접근 가능하다. 컴파일할 때에는 아무런 문제가 없지만 당연히 실행하면 에러가 뜬다. 범위를 초과했기 때문이다. 이렇게 내가 생각한 것과 다른 방식으로 동작을 했을 때, 예외가 발생했다고 한다. C++에서는 이러한 예외를 처리하기 위한 구문을 제공하고 있다. 하지만 위와 같은 직접 배열에 인덱스로 접근하는 경우는 처리가 불가능 하다... 이유는 배열 인덱스는 함수가 아니라서 내가 끼어들 수가 없다. 다음에서 설명할 throw문을 집어넣을 수 없기 때문이다. 예외 발생시 어떠한 디버그용 메세지를 전달할 수 있는데 ..
2019/12/13 - [졸작 진행과정 기록/GameEngine] - 20191213 다음 사이트에서 찾았다. https://www.codeproject.com/Articles/118921/C-Properties C++ Properties C#-Style Properties in C++ www.codeproject.com #include using namespace std; #define PROPERTY(t,n) __declspec( property (put = property__set_##n, get = property__get_##n)) t n; \ typedef t property__tmp_type_##n #define READONLY_PROPERTY(t,n) __declspec( property ..