반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- java
- python
- 디자인 패턴
- MySQL
- 웹프로그래밍
- 디자인패턴
- AI
- 웹서버
- 프론트엔드
- Linux
- 파이썬
- 데이터베이스
- 오류
- Django
- Design Pattern
- css
- 프로그래밍
- pytorch
- pyvenv.cfg
- csrf_token
- 리눅스
- 인공지능
- html
- vscode
- 파이토치
- DB
- 개발환경
- django-debug-toolbar
- javascript
- 백엔드
Archives
- Today
- Total
Shong Studio의 정보 창고
C++ 람다식 다뤄보기 본문
728x90
반응형
C++에서 람다식(Lambda Expression)은 익명 함수 객체를 표현하기 위해 사용됩니다.
주로 간단한 함수 정의를 할 때 유용하며, 함수 포인터나 함수 객체로 전달할 수 있습니다.
람다식의 기본 구문은 다음과 같습니다:
[capture](parameters) -> return_type { body }
각 부분을 설명하겠습니다:
캡처 목록 (
[]
):- 람다 함수가 정의된 위치의 변수들을 어떻게 캡처할지 지정합니다.
[]
: 아무것도 캡처하지 않음.[&]
: 모든 외부 변수를 참조로 캡처.[=]
: 모든 외부 변수를 값으로 캡처.[x, &y]
:x
는 값으로,y
는 참조로 캡처.
매개변수 목록 (
(parameters)
):- 람다 함수가 받을 매개변수를 정의합니다. 일반 함수와 동일하게 사용합니다.
리턴 타입 (
-> return_type
):- 람다 함수의 리턴 타입을 명시적으로 지정할 수 있습니다. 생략할 경우, 컴파일러가 본문을 통해 리턴 타입을 추론합니다.
본문 (
{ body }
):- 람다 함수의 실제 구현 부분입니다.
주어진 람다식 분석
주어진 코드에서의 람다식은 다음과 같습니다:
nc.addObserver("LOWBATTERY", [](void*) { std::cout << "lambda\n"; });
이 람다식을 분석해보겠습니다:
캡처 목록 (
[]
):[]
는 이 람다식이 외부 범위의 어떤 변수도 캡처하지 않음을 의미합니다.
매개변수 목록 (
(void*)
):- 이 람다식은
void*
타입의 매개변수를 하나 받습니다. 이 매개변수를 통해 특정 데이터를 받을 수 있습니다.
- 이 람다식은
리턴 타입:
- 리턴 타입이 명시되어 있지 않으므로, 컴파일러가 자동으로 추론합니다. 이 경우,
void
타입으로 추론됩니다.
- 리턴 타입이 명시되어 있지 않으므로, 컴파일러가 자동으로 추론합니다. 이 경우,
본문 (
{ std::cout << "lambda\n"; }
):- 이 람다식의 본문은 단순히 "lambda\n" 문자열을 출력하는 코드입니다.
캡처 목록의 의미
캡처 목록은 람다 함수가 정의된 위치의 변수들에 접근하는 방법을 정의합니다. 몇 가지 예를 들어보겠습니다:
[]
: 외부 변수를 캡처하지 않음.[&]
: 모든 외부 변수를 참조로 캡처.[=]
: 모든 외부 변수를 값으로 캡처.[x]
: 변수x
를 값으로 캡처.[&x]
: 변수x
를 참조로 캡처.[=, &y]
: 모든 외부 변수를 값으로 캡처하지만,y
는 참조로 캡처.
예제
외부 변수를 캡처하는 람다식 예제를 살펴보겠습니다:
int main() {
int a = 10;
int b = 20;
auto lambda1 = [=]() { std::cout << "a: " << a << ", b: " << b << "\n"; };
auto lambda2 = [&]() { a = 30; std::cout << "a: " << a << ", b: " << b << "\n"; };
auto lambda3 = [a, &b]() { b = 40; std::cout << "a: " << a << ", b: " << b << "\n"; };
lambda1(); // a: 10, b: 20
lambda2(); // a: 30, b: 20
lambda3(); // a: 10, b: 40
return 0;
}
lambda1
은a
와b
를 값으로 캡처합니다.lambda2
는 모든 외부 변수를 참조로 캡처합니다.lambda3
은a
를 값으로,b
를 참조로 캡처합니다.
이렇게 캡처 목록을 통해 람다식이 외부 변수를 어떻게 캡처할지 명시적으로 정의할 수 있습니다.
요약
- 캡처 목록 (
[]
): 람다 함수가 외부 변수를 어떻게 캡처할지 정의. - 매개변수 목록 (
(void*)
): 람다 함수의 매개변수. - 리턴 타입 (
-> return_type
): 람다 함수의 리턴 타입 (생략 가능). - 본문 (
{ body }
): 람다 함수의 실제 코드.
주어진 코드에서 []
는 외부 변수를 캡처하지 않는다는 의미로 사용되었습니다. 이는 해당 람다식이 외부 변수를 필요로 하지 않음을 의미합니다.
728x90
반응형
'프로그래밍 언어' 카테고리의 다른 글
싱글톤(Singleton)패턴 - Cursor 예제로 한방에 이해하기 (0) | 2024.05.29 |
---|