C++ 24

[C++] CRTP 패턴.

CRTP [curiously recurring template pattern] 모든 언어에서 사용하는 패턴은 아니다. 오직 C++ 에서만 숙어처럼 사용하는 패턴이다. template을 이용하여 [본인의 자식 타입] 을 typename 으로 가진다. 그렇게 사용하니 이름이 curiosuly recurring template pattern. 즉 요상하게 반복되는 template pattern이 되었나 보다. 1. CRTP 형태. 2. 사용하는 이유. 3. 예제. 3 - 1. 일반적인 방식으로 구현. 3 - 2. CRTP 패턴으로 구현. 4. C++ 에서 실제 활용하는 코드. 1. CRTP 형태. 말로 풀어 쓰면 아래와 같다. - 기반 클래스를 템플릿으로 만들고 - 파생 클래스 만들 때 자신의 클래스 이름을 ..

C++/기타 2024.02.13

[C++] remove(remove_if) vs erase(erase_if)

결론부터 말하면 C++에서 둘은 완전히 다르다. 조심히 사용하여야 한다. 만약 'vector에서 특정한 조건을 만족시키는 값들을 삭제' 할 때 사용하려고 한다면 물론 둘 다 사용 가능하긴 하다. 다만 erase_if를 사용한다면 원하는 바를 바로 얻을 순 있지만, remove_if를 사용한다면 추가적인 단계를 한 번 더 밟아야 할 것이다. remove_if : 알고리즘은 컨테이너에서 조건을 만족하는 요소를 뒤로 이동시키고, 그 뒤에 유효한 요소 범위를 반환합니다. 실제로 요소를 삭제하지 않고 이동시킨 뒤, 이후의 유효한 요소만 남도록 컨테이너의 크기를 조정합니다. 라고 나와있다. 즉, "aa", "bb", "cc", "dd" 라는 vector가 있을 때, "bb"를 remove_if 한다고 하면 "aa"..

C++/STL 2023.07.11

[C++] Statement vs Expression

제대로 몰라도 구현할 때엔 큰 차이가 없는 것이지만, 그래도 정확히 알아두면 좋겠다 싶어서 정리. C++ 공식 문서에서 basic concepts를 들어가 보면 아래와 같이 statement/ expressions에 대한 간단한 설명을 볼 수 있다. 저렇게 되어 있는 걸 보니 일단 두 가지는 확실하게 알겠다. 기본 컨셉에 나올 만큼 C++의 근본 요소라는 것. statement가 expression보다 상위 표현이라는 것. 1. Statement https://en.cppreference.com/w/cpp/language/statements Statements - cppreference.com Statements are fragments of the C++ program that are executed ..

C++/기타 2023.06.25

[C++] 함수에 const 한정자

class myClass { public: const int getdata1(); int const getdata2(); int getdata3() const; }; 이런 느낌의 함수. 어디 클린 코드의 강의 내용을 보면 한정자를 잘 쓸수록 코드가 좀 더 정확해진다는데, 지금까진 별 개념없이 사용해 왔어서, 시간이 나서 한 번 정리해본다. 결론부터 말하자면, getdata3() 빼고는 의미가 없다. getdata3 은 함수 내부에서 값이 바뀌지 않을 거라고 보증해준다. 그러므로 코드를 작성하다, 만약 const라고 붙인 함수 내부에서 값이 변경되면 컴파일러가 빌드 전에 바로 알려준다. 다만, const가 앞에 붙은 경우엔 다르다. 이 때는 return type인 int를 const라고 해 준다. retu..

C++/기타 2023.06.15

[C++] type cast (static_cast, dynamic_cast, const_cast, reinterpret_cast)

프로그래밍 하다 보면 내가 원하든, 원하지 않든 자연스래 타입을 변경하여 사용할 때가 있다. int type을 bool로 변경하여 사용하거나, enum 값을 int로 바꿔 비교하거나 하는 방식으로. 이렇게 편리하게 사용 할 수 있는게 장점이지만, 처음에 선언 된 변수의 타입을 강제로 바꾼다는 것 때문에 위험성도 분명히 존재한다. 0. C에서의 casting. C에서의 casting은 매우 위험하다. int main() { double d = 3.2; int* p = (int*)&d; printf("%lf, %d", d, *p); return 0; } 이러한 타입이 아예 다른 변수도 무리없이 캐스팅 되고, #include int main() { const int c = 10; int* p1 = (int*)..

C++/기타 2023.05.18

[C++] LValue vs RValue. 총 정리

2023.04.29 - [C++/기타] - [C++] LValue vs RValue (1) [C++] LValue vs RValue (1) 맨 첨에 C를 어정쩡하게 배운 후에 C++ 사용하다 보니 애매하게 이해가 되기도 했고.. 지금도 어느 정도 쓰고 있긴 하지만 아직까지 제대로 감이 잡히지 않아, 공부하며 정리할 겸 남겨본다. https:/ donot-simsim.tistory.com 2023.05.10 - [C++/기타] - [C++] LValue vs RValue (2) [C++] LValue vs RValue (2) 2023.04.29 - [C++/기타] - [C++] lValue vs rValue (1) [C++] LValue vs RValue (1) 맨 첨에 C를 어정쩡하게 배운 후에 C++ ..

C++ 2023.05.16

[C++] LValue vs RValue (3)

2023.05.16 - [C++] - [C++] LValue vs RValue. 총 정리 2023.05.10 - [C++/기타] - [C++] LValue vs RValue (2) [C++] LValue vs RValue (2) 2023.04.29 - [C++/기타] - [C++] lValue vs rValue (1) [C++] LValue vs RValue (1) 맨 첨에 C를 어정쩡하게 배운 후에 C++ 사용하다 보니 애매하게 이해가 되기도 했고.. 지금도 어느 정도 쓰고 있긴 하지만 아직까지 donot-simsim.tistory.com 에서 이어지는 글. value. glvalue와 rvalue의 특성을 모두 가지고 있다. xvalue. [곧 사라지는 값] 이 가지고 있는 두 가지의 특성 1. 본인..

C++/기타 2023.05.15

[C++] LValue vs RValue (2)

2023.04.29 - [C++/기타] - [C++] lValue vs rValue (1) [C++] LValue vs RValue (1) 맨 첨에 C를 어정쩡하게 배운 후에 C++ 사용하다 보니 애매하게 이해가 되기도 했고.. 지금도 어느 정도 쓰고 있긴 하지만 아직까지 제대로 감이 잡히지 않아, 공부하며 정리할 겸 남겨본다. https:/ donot-simsim.tistory.com 에서 이어지는 글. 여기서 lvalue, rvalue 에 대해 했으니, 이번 편에는 xvalue를 다뤄보자. xvalue. glvalue와 rvalue의 특성을 모두 가지고 있다. xvalue는 풀어서 쓰면 expiring value라고 한다. 즉 [곧 사라지는 값] 이다. 이 곧 사라지는 값인 xvalue은 두 가지의 ..

C++/기타 2023.05.10

[C++] LValue vs RValue (1)

맨 첨에 C를 어정쩡하게 배운 후에 C++ 사용하다 보니 애매하게 이해가 되기도 했고.. 지금도 어느 정도 쓰고 있긴 하지만 아직까지 제대로 감이 잡히지 않아, 공부하며 정리할 겸 남겨본다. https://learn.microsoft.com/ko-kr/cpp/cpp/lvalues-and-rvalues-visual-cpp?view=msvc-170 값 범주: Lvalues 및 Rvalues(C++) 자세한 정보: Lvalues 및 Rvalues(C++) learn.microsoft.com 해당 사이트에서 소개하는 value들 간의 diagram. 우리는 편하게 lvalue / rvalue라고 소개하고 있지만, 위에서 말하기엔 lvalue가 좀 더 밑의 개념이고, rvalue가 좀 더 상위 개념이다. 다만 l..

C++/기타 2023.04.29
반응형