반응형 전체 글58 C++ 객체 정렬 1. operator클래스 내부에서 operator클래스(객체)에서 이다.즉, “이 객체가 다른 객체보다 작은가?”를 판단하는 기준을 직접 정하는 함수라고 생각하면 된다.애초에 STL에서 정렬(sort)을 실행할 때 '으로 비교하기 때문에 '을 다시 재정의 한다고 생각하면 된다.#include #include using namespace std;struct Person { string name; int age; // 2. 람다 함수이름 없는 즉석 함수[ ] 안에서 외부 변수 캡처 가능비교 기준을 임시로 바꾸고 싶을 때 편리#include #include #include #include using namespace std;struct Person { string name; i.. 2025. 11. 5. C++ mutable mutable은 const와 함께 자주 등장하고, 제대로 이해하면 안전하고 깔끔한 코드(특히 캐싱, 로깅, 람다 등)를 작성할 수 있다. 1. mutable은 클래스의 비정적(non-static) 멤버 변수에 적용할 수 있으며, 그 멤버는 객체가 const로 선언되어 있거나 const 멤버 함수 내에서라도 수정할 수 있다. 2. 람다 표현식에서의 mutable은 "캡처된 값(복사본)을 operator() 내부에서 수정할 수 있게" 해주는 키워드이다. ※ mutable은 const 제약을 의도적으로 무시하게 해주지만, 동시성(스레드 안전) 문제까지 해결해주지는 않는다. 1. 클래스 멤버 변수에서의 mutable#include struct Counter { mutable int count = 0; .. 2025. 11. 3. C++ 람다함수 심화편 람다 함수는 보통 '일회성'으로 쓰이며 따로 캡처 '[]' 라는게 존재하지 않는다.하지만 C++에서는 캡처 '[]'가 존재하는데 이게 왜 존재할까? C++에서 람다는 객체다.예를 들어auto f = [=]() { return x + y; }; 이와 같이 코드를 작성했을 때컴파일러가 이렇게 변환한다.class __lambda_1 { int x, y; // [=]로 값 캡처 → 멤버 변수로 복사됨public: int operator()() const { return x + y; }}; 즉, 람다는 함수가 아니라 객체다!그래서 operator()를 가진 함수 객체 (functor) 로 동작한다.이 말은 곧 —람다를 변수로 저장하거나, 나중에 다시 호출하거나,다른 함수로 넘기거나, 비동기 쓰레드에서 .. 2025. 11. 3. 클로저 (Closure) 클로저(closure)는 “자신이 선언된 환경(scope)에 있는 변수들을 기억하는 함수 객체”이다. 클로저(Closure) = 함수 + 함수가 만들어질 때의 환경(스코프)을 함께 기억하는 것 클로저는 함수와 함수가 만들어질 때의 환경에서 결합된 경우를 뜻하기 때문에 보통 함수형 언어에서 많이 사용한다. 클로저 사용 이유1. 전역 변수 사용 억제2. 정보의 은닉 1. 전역 변수 사용 억제전역 변수의 사용 빈도를 줄이면 코딩을 할 때 안정성이 훨씬 높아진다. 애초에 전역 변수는 누구나 쉽게 접근, 변경이 가능하기 때문에 위험하다. 이는 의도치 않게 값이 변경될 수 있다는 것을 의미한다. 만약 누군가에 의해 의도치 않게 전역 변수의 값이 변경된다면 오류로 이어진다. 2. 정보의 은닉굳이 private으로 .. 2025. 11. 3. 이전 1 2 3 4 ··· 15 다음 반응형