람다 표현식: 캡처, mutable, 제네릭
캡처, mutable 의미 및 auto 제네릭 매개변수를 사용하는 람다를 작성합니다.
람다 표현식: 캡처, mutable, 제네릭은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
람다란 무엇인가요
람다는 인라인 익명 함수 객체입니다. 작은 이름 있는 함수나 operator()가 있는 구조체를 작성해야 할 때 대신 사용할 수 있습니다.
auto square = [](int x) { return x * x; };
std::cout << square(5); // 25문법 구조
람다는 네 부분으로 구성됩니다:
[capture]— 주변 범위에서 사용할 변수(parameters)— 함수 매개변수 목록과 같은 부분-> return_type— 선택 사항이며 대개 추론됨{ body }
빈 캡처
[]는 “아무것도 캡처하지 않습니다”라는 뜻입니다. 람다는 전역 변수와 정적 변수에만 접근합니다.
auto add = [](int a, int b) { return a + b; };값으로 캡처하기
캡처 절에 변수를 나열하면 해당 변수가 람다 안으로 복사됩니다.
int n = 5;
auto times = [n](int x) { return x * n; };
n = 10;
std::cout << times(3); // 15 (captured n was 5)참조로 캡처하기
&를 앞에 붙이면 참조로 캡처합니다. 람다 안에서 변경한 내용이 바깥 변수에 영향을 줍니다.
int counter = 0;
auto inc = [&counter]() { ++counter; };
inc(); inc(); inc();
std::cout << counter; // 3기본 캡처: [=]와 [&]
[=]를 사용하면 사용되는 모든 항목을 값으로 캡처하고, [&]를 사용하면 모두 참조로 캡처합니다. 주의해서 사용하고, 가능하면 명시적으로 지정하십시오.
auto f = [=]() { return a + b; }; // copies a, b
auto g = [&]() { return a + b; }; // references a, b변경 가능한 람다
기본적으로 값으로 캡처한 항목은 람다 내부에서 const입니다. 이를 수정하려면 mutable을 추가하십시오. 변경 내용은 람다의 복사본에만 영향을 줍니다.
int n = 5;
auto f = [n]() mutable {
n += 1; // OK because of mutable
return n;
};
f(); f(); // returns 6, then 7
std::cout << n; // still 5 in outer scope반환 형 추론
컴파일러는 본문에서 반환 형을 추론합니다. 필요하면 반환 형을 명시하십시오.
auto half = [](int x) -> double { return x / 2.0; };제네릭 람다 (C++14)
매개변수 목록에 auto를 사용하면 모든 형에 작동하는 제네릭 람다를 만들 수 있습니다.
auto print = [](const auto& x) { std::cout << x << "\n"; };
print(42); // int
print("hello"); // const char*
print(3.14); // double함수 인수로 사용하는 람다
STL 알고리즘은 람다를 조건자와 변환 함수로 받을 수 있습니다.
std::vector<int> v = {5, 2, 8, 1};
std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; });람다는 함수 객체입니다
내부적으로 컴파일러는 operator()가 있는 클래스를 생성합니다. 람다는 std::function 또는 auto에 저장할 수 있습니다.
빠른 확인
[n](int x) { return x * n; } 람다 내부에서 람다를 mutable로 만들지 않고 n에 대입할 수 있나요?
복습
람다는 익명 인라인 함수 객체입니다. 값이나 참조로 캡처할 수 있고, 값으로 캡처한 항목을 수정하려면 mutable을 지정하며, C++14 이상에서는 제네릭 람다에 auto 매개변수를 사용할 수 있습니다.
자주 묻는 질문
“람다 표현식: 캡처, mutable, 제네릭” 강의는 무료인가요?
네 — “람다 표현식: 캡처, mutable, 제네릭” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“람다 표현식: 캡처, mutable, 제네릭”에서 뭘 배우나요?
캡처, mutable 의미 및 auto 제네릭 매개변수를 사용하는 람다를 작성합니다. 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C++ Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“람다 표현식: 캡처, mutable, 제네릭” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- auto, decltype 및 형식 추론
- 범위 기반 for, nullptr 및 enum class
- 람다 표현식: 캡처, mutable, 제네릭
- 구조적 바인딩과 if-init C++17