목록C++ (60)
나만의 작은 도서관

람다(Lambda) 표현식(C++11)// 기본 형태 : [캡처](매개변수들)->리턴값{함수내용};// 리턴값은 생략가능[](Item& item) {return item._rarity == Rarity::UNIQUE;};// 람다로 인해 만들어진 실행시점 객체 = 클로저(closure)auto isUniqueLambda = [](Item& item) {return item._rarity == Rarity::UNIQUE; }람다 표현식은 함수 객체(Functor)를 빠르게 만드는 문법으로, 반환값은 람다 표현식이 정의될 때 생성된 익명 클래스의 객체이다. (이하 람다 표현식을 “람다”라고 지칭)당연하게도 람다의 리턴값인 익명 함수 객체는 Callable 한 개체 중 하나이다.리턴값인 익명 함수 객체는 런타..
함수 객체(functor)란?class Functor {public: void operator()() { /* do something */ }}Functor functor;functor(); // = functor.operator() 함수 호출functor는 callable 한 개체 중 하나로, 호출 연산자 ()를 오버로딩하여 함수처럼 사용할 수 있는 객체를 의미한다.functor는 C++ 전반적으로 자주 활용되며, 대표적으로 STL에서 자주 활용되어 있다. functor 예제#include using namespace std;class Functor{public: void operator()() { cout Functor의 활용 예제1. 커맨드 패턴커맨드 패턴은 작업을 객체로 캡슐화하여 큐에..

함수 포인터란?리턴_타입 (*포인터_이름)(매개변수_타입) // exampleint (*ptr_fn)(int, int);int (*ptr_fn)(int (*)[3], int);함수 포인터란 callable 한 개체 중 하나로, 함수의 위치를 가리키는 포인터를 의미한다.함수를 변수처럼 포인터로 가리킬 수 있는 이유는 함수가 프로세스 메모리 구조 중 코드 영역(code segment)에 저장되어 있기 때문이다.함수 포인터는 C언어에서 넘어온 문법이다.함수는 정적 배열처럼 이름이 시작 주소값이 되므로, 함수 포인터에는 함수 이름을 대입한다. 함수 포인터 예제int max(int a, int b); // 함수 선언int (*ptr_max)(int, int); // 함수 포인터 선언ptr_max = max; /..

콜백 함수란?콜백 함수란 다른 함수의 매개변수로 전달되어 특정 시점에 실행되는 함수를 의미한다. 콜백 함수 예제아래 코드에서 CallableType은 호출 가능한 타입을 의미하며(뒤에서 설명), 실제로 존재하는 타입 식별자는 아니다.// 함수를 매개변수로 받는 함수void process(int a, int b, CallableType callback) { int sum = a + b; callback(sum); // 콜백 함수 호출}콜백 함수를 사용하는 이유콜백 함수는 “동작(함수)을 직접 실행하지 않고 넘겨준다”는 것이 핵심이다. 이렇게 동작을 함수에게 넘겨줬을 경우 아래와 같은 장점을 가지게 된다. 유연성과 코드 재사용성 (Flexibility & Code Reusability)상황에 따..
전방 선언(Forward Declaration)이란?class MyClass;"전방 선언(Forward Declaration)"은 식별자를 정의하기 전에 식별자의 존재를 컴파일러에게 미리 알리는 것이다.전방 선언의 주 사용목적은 헤더 포함 의존성을 최소화하여 컴파일 속도를 향상하기 위함이다. (앞으로의 설명은 클래스 전방 선언을 기준으로 설명) 전방 선언 예시// Game.hclass Player; // 나중에 정의하겠다고 전방선언class Game{public: Game() {} ~Game() {}private: Player* _player; // 최상단 줄을 지우고 class Player* _player;와 같은 형태도 가능하다.}; 전방 선언이 가능한 경우와 불가능한 경우전방 선언은 컴파일러가 클..

캐스팅이란?캐스팅은 데이터 타입을 다른 데이터 타입으로 변환하는 것을 의미한다.C 스타일의 캐스팅T var = (T)expression;C++에서도 C 스타일 문법을 사용할 수 있다. C 스타일의 캐스팅은 표현식(expression) 앞에 소괄호로 둘러싼 변환할 타입 T를 적어주는 방식으로 선언한다. 일반 타입(값 타입)으로 캐스팅int a = (int)b;변환할 타입으로 비트 패턴을 재구성하는 캐스팅.단, 이전 비트 패턴의 의미를 최대한 유지하는 방향으로 재구성한다.큰 타입에서 작은 타입으로 캐스팅할 경우 상위 비트가 잘린다.예를 들어, int → short로 캐스팅할 경우, 상위 비트 2바이트가 잘려 0xffff0000 → 0x0000이 된다.연관 관계가 없는 타입 사이의 캐스팅은 컴파일 오류가 발생..