※ 주의 사항 ※ 이 글의 목적은 '지식의 전달'이 아닌 '학습의 기록'입니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. C++17에서 신택스 슈거(syntactic sugar)와 자동화 타입 추론이 결합되어 새로운 구조체 형태의 바인딩 기능이 추가되었습니다. 신택스 슈거란 무엇이고, 자동화 타입 추론은 또 무엇인지 먼저 정리하고 넘어가도록 하겠습니다. 신택스 슈거(syntactic sugar) 신택스 슈거란 '사람이 쉽게 이해하고 쉽게 표현할 수 있도록 컴퓨터 언어를 디자인해 놓은 문맥'을 의미합니다. 사람이 사용하기 달콤하다는 것에서 유래되었고, 깔끔하고 명확하게 표현 가능하다는 특징이 있습니다. 몇몇 예시를 들면 다음과 같습니다. ..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. C++ 진영에서는 C 스타일의 형 변환 연산자를 가리켜 '오래된 C 스타일 형 변환 연산자'라고 부르기도 합니다. C 스타일의 형 변환 연산자는 C언어와의 호환성을 위해서 존재할 뿐, C++에서는 새로운 형 변환 연산자와 규칙을 제공하고 있습니다. 모기를 잡으려면 모기약을 뿌려야 하고, 바퀴벌레를 잡으려면 바퀴벌레 약을 뿌려야 합니다. 모기나 바퀴벌레를 잡자고 사람까지 잡을 수 있는 독한 약을 써서는 안 됩니다. 그런데 C++에 있어서 C언어의 형 변환 연산자는 사람까지 잡는 독한 약에 비유됩니다. 그만큼 강력해서 형 변환하지 못하..
※ 주의 사항 ※ 이 글의 목적은 '지식의 전달'이 아닌 '학습의 기록'입니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 지금부터 다루게 될 예외 처리 문법은 프로그램의 성능을 많이 잡아먹는다고 합니다. 그런 이유로 예외 처리 문법을 사용하기보다 if문을 이용하는 게 더 좋다고 합니다. 이런 방식의 예외 처리 방법이 있다는 것 정도로만 알아두시면 좋을 것 같습니다. 예외 처리에서의 '예외'는 프로그램 실행 도중에 발생하는 '예외적인 상황'을 의미합니다. 그리고 C++는 이러한 예외적인 상황의 처리를 위한 문법을 별도로 제공하고 있습니다. 예외 C++에서 말하는 '예외'는 프로그램의 실행 도중에 발생하는 문제 상황을 의미합니다. 따라서 컴..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 함수 템플릿 '함수 템플릿'은 다음과 같은 특징을 가지고 있습니다. 함수 템플릿은 함수를 만들어 낸다. 함수의 기능은 결정되어 있지만, 자료형은 결정되어 있지 않아서 결정해야 한다. 모형자가 모형을 만드는 도구가 되는 것처럼 함수 템플릿은 함수를 만드는 도구가 됩니다. 하지만 함수 템플릿이 만들어 내는 함수의 자료형이 결정되어 있지 않습니다. 우리는 이 함수 템플릿을 이용해서 다양한 자료형의 함수를 만들어 낼 수 있습니다. 다음의 예를 통해서 함수 템플릿을 구체적으로 이해해 보겠습니다. int Add(int num1, int num..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 이번 절에서는 C언어에서 사용하는 문자열과 C++에서 제공하는 std::string 클래스의 장단점을 알아보고, char 타입의 배열이나 포인터를 사용하는 것에 대해 비교 설명하고자 합니다. C언어에서는 문자열을 표기할 때 다음과 같이 char 타입을 사용합니다. #pragma warning(disable: 4996) #include #include #include int main() { const char* cc = "문자열을 입력합니다. this is a string"; char cb[17]; char* str; memcpy(c..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. new와 delete도 연산자이기 때문에 오버 로딩이 가능합니다. 그래서 이 두 연산자의 오버 로딩에 대해서 예를 보이겠습니다. 또한 포인터 연산자를 오버 로딩하면서 개념적으로 어렵다고 이야기하는 '스마트 포인터'와 '펑터(functor)'에 대해서도 간단히 설명하겠습니다. new 연산자 오버 로딩 new 연산자의 오버 로딩은 앞서 보였던 연산자 오버 로딩과는 조금 다릅니다. 간단한 예를 통해서 new 연산자는 어떻게 오버 로딩되는지 알아보겠습니다. 연산자를 오버 로딩할 대상 클래스는 다음과 같습니다. class Point { pr..