특징 : 콜백 함수는 전달인자로 다른 함수에 전달되는 함수를 뜻한다. 함수의 동작을 완료하기 위해 외부 함수 내부에서 호출된다. 콜백함수는 함수 포인터 또는 람다 함수 등을 이용해 외부 함수에 전달된다. 예시 : #include class Item { public: int itemId = 0; int rarity = 0; int ownerId = 0; }; class FindByOwnerId { public: bool operator()(const Item* item) { return (item->ownerId == ownerId); } public: int ownerId; }; class FindByRarity { public: bool operator()(const Item* item) { retur..
객체가 함수처럼 동작한다고 하여 함수 객체라고 한다. 함수 호출 연산자 : () 연산자는 "함수 호출 연산자" 라고 불린다. 해당 연산자를 overloading 하여 함수 객체를 구현할 수 있다. 예제 : class Functor { public: void operator()() { std::cout
언제 사용? : 비트 단위의 조작이 필요한 경우 비트 플래그 (Bit Flag) 1Byte는 8bit로 이루어져 있고, 바이트의 개별 비트를 "비트 플래그"라고 한다. 주의 사항 : 시프트 연산시 비트들이 왼쪽, 오른쪽으로 밀려나는데... right shift 연산시 원본값의 부호에 따라서 새롭게 왼쪽에서 생성되는 비트의 값이 달라진다... 때문에 정신건강을 위해서 비트연산시 사용하는 값을 unsigned 로 선언하여 "양(+)" 의 부호를 가지도록 설정하고 사용하자 비트 연산의 종류 : 1. bitwise not (~) 일반적인 "not (!)" 연산자와는 다르다. 단일 숫자의 모든 비트를 대상으로 0->1 , 1->0 으로 뒤바꾸는 연산을 진행한다. 101010 -> 010101 2. bitwise ..
오른값 참조 2 오른값 참조 타입을 인자로 받는 Test_RValueRef() 함수가 있다고 가정했을 때, k4의 경우 왼값이기에 인자로 들어갈 수없는건 이해가 간다. 하지만, k5의 경우 std::move() 함수를 사용하여 오른값 참조 타입으로 만들어 변수에 저장하였는데 에러가 발생한다. 오른값 참조 타입인것과 오른값 인것은 별개의 문제이다. 오른값 : 왼값을 제외한 나머지 = 단일식에서 벗어나면 사용 x 오른값 참조 : 오른값만 참조할 수 있는 타입 위의 정의를 보면 오른값은 재사용이 가능하면 안된다. 그런데 k5는 위에서 선언한 후 인자로 넣어주면서 재사용이 가능하게 되어 버린것을 알 수 있다. 때문에 정상적으로 사용하기 위해선 인자로 넣어줄 때, 다시 std::move() 함수를 사용해서 오른값..