분류 전체보기
-
[Effective Modern C++] Type deduction : autoC++/Effective Modern C++ 2021. 12. 27. 15:41
형식 연역 (Type deduction)은 소스코드에서 특정한 코드가 어떤 것으로 바뀌는 것 입니다. 여기서 '특정한 코드'란 template, auto, decltype 등 이 있으며 바뀌게 되는 '어떤 것' 에는 자료형부터, 함수, 람다식 등이 있습니다. 이전 글에서, template에 대한 형식 연역을 살펴보았습니다. 몇 가지 예외를 제외하면, 특정한 규칙에 따라 연역이 직관적으로 이루어짐을 볼 수 있었습니다. auto는 template과 유사합니다. 한 가지 경우만 제외하면, template와 동일하게 연역됩니다. 이번 글에서는 auto의 형식 연역에 대하여 살펴보도록 하겠습니다. 함수 템플릿은 일반적으로 아래와 같이 표현되고, 호출됩니다. //Declaration template void fun..
-
[Effective Modern C++] Type deduction : TemplateC++/Effective Modern C++ 2021. 12. 21. 09:27
형식 연역 (Type deduction)은 소스코드에서 특정한 코드가 어떤 것으로 바뀌는 것 입니다. 여기서 '특정한 코드'란 template, auto, decltype 등 이 있으며 바뀌게 되는 '어떤 것' 에는 자료형부터, 함수, 람다식 등이 있습니다. 형식 연역은 특정한 규칙에 의거하여 이루어집니다. 개발자가 추론한 것과 컴파일러가 실제로 연역한 것이 다를 수 있기 때문에, 이 규칙을 확실히 이해해야 합니다. 귀찮고, 복잡하다고 안 쓰기에는 template과 auto는 굉장히 유용한 기능이기 때문입니다. 이번 글에서는 template의 형식 연역에 대하여 살펴보도록 하겠습니다. 함수 템플릿은 보통 아래와 같은 형태로 선언되고, 호출됩니다. //Declaration template void func..
-
[C++] 람다 표현식C++/이것이 C++이다 2021. 12. 6. 16:49
람다 표현식 (Lambda Expression)은 람다식 (Lambda)으로 자주 불리는 함수 선언 방식입니다. 람다식은 이전 글(함수)에서 살펴본 함수 객체, 함수 포인터와 유사하게 함수를 전달하는 데 주로 사용됩니다. 람다식은 다음과 같은 형태로 구성됩니다. [] () mutable throw() -> int { int a; a++ return a; } [] : Capture clause, Labmda introducer라고 합니다. 람다식 외부 변수에 접근하기 위해 사용합니다. () : Parameter list입니다. 파라미터가 없을 경우 생략 가능합니다. mutable : Capture를 통해 참조, 복사 한 외부 변수의 상수성을 제거하는 데 사용됩니다. 필요한 경우에만 기술하는 속성입니다. t..
-
[C++] 함수C++/이것이 C++이다 2021. 11. 28. 23:45
함수는 이전 글(함수 기본)에서도 다루었던 주제입니다. 지난 글에서는 함수 그 자체의 기능 (디폴트 파라미터, 인라인 등...)에 대해 다루었습니다. 이번 글에서는 함수를 객체지향적으로 다루는 것과 관련이 있는 기능에 대해 살펴보도록 하겠습니다. 1. 함수 포인터 더보기 포인터는 주소를 저장하는 변수 입니다. 그리고, 이 주소에는 함수 또한 포함됩니다. 함수 또한 변수와 마찬가지로 자기만의 주소를 가지고 있습니다. 포인터를 통해, 함수의 주소를 가리키고 사용하는 것이 가능합니다. 예제를 살펴보겠습니다. #include using namespace std; int test_func() { return 12; } int main() { int (*func)() = test_func; cout
-
[C++] 예외 처리C++/이것이 C++이다 2021. 11. 25. 13:06
프로그램의 흐름이 개발자가 의도한 방향대로 흘러가지 않는 경우는 흔한 일입니다. 프로그램이 실행되는 기기의 환경이 다르거나 사용자의 입력이 개발자가 의도한 것과 다르다거나 하는 등의 이유로, 프로그램에는 언제나 예외가 발생할 수 있습니다. 이번 글에서는 예외 상황에 대응하는 방법에 대하여 다룰 것 입니다. 1. try, catch, throw 더보기 C++는 문법적으로 예외상황에 대한 대응책을 제공합니다. try, catch, throw 예약어가 바로 예외 처리에 사용되는 예약어 입니다. 예제를 살펴보겠습니다. #include using namespace std; int main() { try { // Line 5 : Logic execution int a, b; cin >> a >> b; if (b =..
-
[C++] 스마트 포인터C++/이것이 C++이다 2021. 11. 3. 15:16
스마트 포인터는 포인터처럼 동작하는 클래스 템플릿 입니다. 동적 할당 된 변수를 자동으로 해제해주는 스마트 포인터는 메모리 관리에 큰 도움이 되는 기능입니다. 이번 글에서는 스마트 포인터의 4가지 종류에 대하여 살펴 볼 것입니다. 1. auto_ptr 더보기 auto_ptr은 가장 오래 된 스마트 포인터 입니다. 가장 오래된 만큼 개선이 많이 이루어졌을 수도 있겠지만, 아쉽게도 auto_ptr은 그렇지 않습니다. 예제를 살펴보겠습니다. #include using namespace std; class MyClass { public: MyClass() { cout
-
[C++] 템플릿C++/이것이 C++이다 2021. 10. 26. 17:22
템플릿은 모양을 찍어내는 틀과 같습니다. Template 1. [명사] 형판(形板) 2. [명사] 견본, 본보기 C++에서의 템플릿도 위와 유사한 의미로 사용됩니다. 한 코드를 찍어내듯이 가져다 사용하는 템플릿은, C++의 생산성에 많은 기여를 하는 문법입니다. 이번 글에서는 템플릿을 사용하는 방법에 대해 살펴볼 것 입니다. 1. 템플릿 더보기 서론에서 템플릿을 틀에 비유했습니다. 이 틀로 찍어내는 것은 바로 자료형 (클래스) 입니다. 템플릿은 함수, 클래스에 적용할 수 있으며 다음과 같은 문법을 사용합니다. template [Return type] [function name]([Params]) { } template class [Class name] { }; 관련된 예제와 함께 보겠습니다. #inclu..
-
[C++] 객체 간 관계C++/이것이 C++이다 2021. 10. 19. 00:09
C++는 OOP Language 입니다. OOP적 관점에서 C++의 객체는 다른 객체와 특정한 관계가 성립합니다. 이번 글에서는 이하의 내용을 다뤄 볼 것입니다. 객체가 다른 객체와 어떤 관계가 될 수 있는지 객체 간 관계 형성과 관련된 문법이 무엇인지 기초와 관련된 만큼, 많은 내용이 포함되어 있지는 않습니다. 다만, 설계와 관련된 내용이 조금 나오는 관계로 짚고 넘어가면 좋을 것 같습니다. 1. friend 키워드 더보기 friend 키워드는 클래스 내부에서, 함수나 클래스 선언 앞에 사용되는 키워드 입니다. 다음과 같이 사용합니다. friend class [Class Name]; friend [Function Prototype]; 이렇게 선언된 클래스와 함수는 접근 제어 지시자의 영향을 받지 않습니..