이름 없는 함수, 익명 함수의 의미로 용법은 다음과 같다:
void main()
{
[] // lambda capture, 참조나 복사 형태로 외부 변수를 전달
() // 함수의 인수 정의
{} // 함수의 본체
() // 함수 호출
}
(예1)
[] { std::cout <<"Hello, World!" << std::endl; } ();
// 마지막에 ()가 있으니 호출까지 발생.
[] (String *s) { std::cout <<s << std::endl; } ("Hello, World!");
// 호출하면서 "Hello~" 스트링을 넘겨 주었고, 인자의 형식은 string
// 이라는 것이 함수 인수 정의에 들어 갔음. 따라서, s에 "Hello~"가
// 대입되고 함수 본체에서 출력이 발생.
auto func1 = [] {std::cout <<"Hello, World!" << std::endl; };
func1();
// 맨 뒤에 ()가 없으므로 함수 호출은 일어 나지 않으며, 함수 객체의 선언이다.
// 따라서 호출을 하기 위해서 이 객체에 ()을 붙임.
auto func2 = [] (float f) { return f; };
float f2 = func2(3.24f);
// 함수 객체 func2는 인자로 실수형 f를 받아 들여
// 이 값을 리턴한다.
auto func3 = [] () -> float { return 3.14; };
float f3 = func3();
// 반환 타입을 명시적으로 변환: ->type
댓글 없음:
댓글 쓰기