프로그래밍206 [C/C++] 가변 인자 리스트 References Professional C++ https://en.cppreference.com/w/ Contents 가변 인자 리스트 (variable-length argument list) Variable-Length Argument Lists 기존 C 언어의 기능인 가변 인자 리스트(variable-length argument list)를 살펴보겠습니다. 간혹 레거시 코드에서 사용하기도 하는데, 새로 C++로 작성한다면 가변 인자 템플릿(variadic template)을 사용하는 것이 좋습니다. 에서 제공하는 C 함수인 printf()를 먼저 살펴보겠습니다. 이 함수를 호출할 때 전달할 수 있는 인자는 다음과 같이 다양합니다. printf("int %d\n", 5); printf("String.. 2022. 2. 23. [C++] Lambda Expression (람다 표현식) References Professional C++ https://en.cppreference.com/w/ Contents Lambda Expression 람다 표현식(Lambda expression)이란 함수나 함수 객체를 별도로 정의하지 않고 필요한 지점에서 곧바로 함수를 직접 만들어 사용할 수 있는 일종의 익명 함수(anonymous function)입니다. 람다 표현식을 사용하면 익명 함수를 인라인으로 작성할 수 있습니다. 문법은 매우 쉽고, 코드를 깔끔하게 만들 수 있으며, 읽기도 쉬워집니다. 특히 다른 함수에 전달되는 짧은 콜백 함수를 인라인으로 작성할 때 유용합니다. 1. 문법 먼저 람다 표현식의 문법을 살펴보겠습니다. 다음 예제는 콘솔에 문자열을 출력하는 람다 표현식을 정의하고 있습니다. 람.. 2022. 2. 23. [C++] Function Object (함수 객체) References Professional C++ https://en.cppreference.com/w/ Contents Function Object (Functor) 어떤 클래스의 함수 호출 연산자(function call operator)를 오버로딩해서 그 클래스의 객체를 함수 포인터처럼 사용하게 만들 수 있습니다. 이렇게 사용하는 객체를 함수 객체(function objects) 또는 펑터(functor)라고 부릅니다. 단순한 함수 대신 함수 객체를 사용하면 여러 호출들 간에 상태를 유지할 수 있다는 장점이 있습니다. 어떤 클래스 함수 객체를 만들기 위해서, 단지 함수 호출 연산자를 오버로딩하면 됩니다. 아래의 간단한 함수 객체 예제가 있습니다. class IsLargerThan { public: .. 2022. 2. 22. [C++] Function Pointer (함수 포인터) References Professional C++ https://en.cppreference.com/w/ Contents Function Pointer (함수 포인터) Pointers to Methods (or Data Members) C++의 함수는 다른 함수에 인수로 전달하거나, 다른 함수로부터 리턴되거나 변수에 할당하는 등 일반 변수와 같은 방식으로 사용될 수 있기 때문에 first-class function(일급 함수)라고 불립니다. 이런 문맥에서 자주 등장하는 용어는 호출할 수 있는 것이라고 표현되는 콜백(callback) 입니다. 여기서 콜백이란 함수 포인터(function pointer)나 함수 포인터와 슈사한 역할을 하는 것들을 말하는데, 예를 들면 operator()를 오버로딩한 객체와 .. 2022. 2. 22. [C++] Iterator (이터레이터, 반복자) References Professional C++ Contents Iterator, Iterator Traits Stream Iterator Iterator Adaptor Reverse Iterator Move Iterator 1. Iterator 표준 라이브러리는 컨테이너의 원소에 접근하는 기능을 범용적으로 제공하기 위해 반복자(이터레이러, iterator) 패턴을 사용합니다. 컨테이너마다 원소에 대해 반복문을 수행할 방법이 담긴 특수한 스마트 포인터인 반복자가 정의되어 있습니다. 컨테이너의 종류가 달라도 반복자의 인페이스는 모두 C++ 표준을 따르므로 모두 같습니다. 그래서 구체적인 동작은 달라도 컨테이너 원소에 대해 반복문을 비슷한 방식으로 작성할 수 있도록 인터페이스는 통일되어 있습니다. 반복자는.. 2022. 2. 21. [C++] 연산자 오버로딩 (2) References Professional C++ Contents 함수 호출 연산자 오버로딩 역참조 연산자 오버로딩 변환 연산자 메모리 할당/해제 연산자 오버로딩 사용자 정의 리터럴 연산자 오버로딩 [C++] 연산자 오버로딩 (1) 지난 포스팅에 이어 연산자 오버로딩에 대해서 계속 알아보도록 하겠습니다. 6. 함수 호출 연산자 오버로딩 함수 호출 연산자 operator()도 오버로딩할 수 있습니다. 클래스를 정의할 때 operator()를 추가하면 이 클래스의 객체를 함수 포인터처럼 사용할 수 있습니다. 함수 호출 연산자를 제공하는 클래스의 객체를 함수 객체(function object, or functor)라고 합니다. 이 연산자는 non-static 메소드로 오버로딩해야 합니다. 아래 코드를 통해 o.. 2022. 2. 20. [C++] 연산자 오버로딩 (1) References Professional C++ Contents 연산자 오버로딩 (Operator Overloading) 산술 연산자 오버로딩 비트 연산자 / 논리 연산자 오버로딩 스트림 입출력 연산자 오버로딩 인덱스 연산자 오버로딩 C++에서는 +,-,= 과 같은 연산자의 의미를 클래스에서 새롭게 정의할 수 있습니다. 연산자 오버로딩을 활용하면 클래스를 int나 double 같은 기본 타입으로 취급할 수 있습니다. 심지어 클래스를 배열이나 함수, 포인터처럼 만들 수도 있습니다. 아마 오버로딩에 관해서는 잘 알고 있을거라고 생각하지만, 놓치는 부분들이 있을 수도 있는 연산자 오버로딩에 대해 세부사항들을 소개해보도록 하겠습니다. 1. 연산자 오버로딩 개요 C++은 +, myCell >> anotherCe.. 2022. 2. 20. [C++] I/O 스트림 References Professional C++ https://en.cppreference.com/w/ Contents C++ I/O 기능 스트림 (Stream) 문자열 스트림 (String Stream) 파일 스트림 (File Stream) 양방향 I/O (Bidirectional I/O) 프로그램의 주된 기능은 입력(input)을 받아서 결과물(output)을 생성하는 것입니다. 어떠한 output도 생성하지 않는 프로그램은 그다지 쓸모가 없습니다. 프로그래밍 언어마다 나름대로의 I/O 메커니즘을 제공하는데, 언어의 기본 기능에 포함되어 있기도 하고, OS에 특화된 API로 제공되기도 합니다. I/O 시스템은 유연하고 사용하기 쉬울수록 좋습니다. I/O 시스템이 유연하다는 것은 파일이나 콘솔을 비롯.. 2022. 2. 19. [C++] static 키워드 (+ extern) References Professional C++ https://en.cppreference.com/w/ Contents static 키워드 용도 extern 키워드 non-local 변수의 초기화(소멸) 순서 C++ 코드에서 static 키워드의 용도는 다양하며, 얼핏보면 그 용도들간에는 전혀 관련이 없어 보입니다. 이렇게 키워드를 다양한 곳에서 사용하도록 '오버로딩'한 것은 C++언어에서 키워드가 늘어나는 것을 피하기 위해서 입니다. 이번 포스팅에서는 다양한 static 키워드의 용도에 대해서 알아보겠습니다. static Data Member and Methods 먼저 클래스의 데이터 멤버와 메소드를 static으로 선언할 수 있습니다. static으로 선언한 데이터 멤버는 non-static 데이터.. 2022. 2. 18. [C++] 캐스팅(Casting) References Professional C++ https://en.cppreference.com/w/ Contents const_cast() static_cast() reinterpret_cast() dynamic_cast() std::bit_cast() C++에서는 어떤 타입을 다른 타입으로 캐스팅하기 위한, const_cast(), static_cast(), reinterpret_cast(), dynamic_cast() 와 C++20에서부터 지원하는 std::bit_cast() 라는 5가지의 캐스팅 방법을 제공합니다. (int)myFloat와 같은 C 스타일의 캐스팅도 C++에서 계속 지원하고 있으며 현재까지도 여러 코드에서 많이 사용하고 있습니다. C 스타일 캐스팅 방법은 C++의 캐스팅 기능을.. 2022. 2. 17. 이전 1 ··· 9 10 11 12 13 14 15 ··· 21 다음