모던 C++ 람다(함수형)

YoungJun.Hwang·2023년 4월 10일
0
post-thumbnail

모든 내용은 YOUTUBE 코드없는프로그래밍 채널의 내용을 토대로 작성했습니다.

C++ 는 oop 중심의 언어이지만, fuctional programming 의 핵심 feature 인 lmbda function 지원하기 시작했다.
functional programming 의 핵심은 "함수들을 "Object" 나 "Variable" 처럼 다룰 수 있는 것에서 부터 시작된다.

함수들을 object 처럼 다루는 것 부터 살펴보자.

Function Object

#include <iostream>

class Plus
{
public:
	explicit Plus(int a) : localVar{ a }{}
	int operator() (int x) const
	{
		return localVar + x;
	}

private:
	int localVar;
};

int main()
{
	Plus plus3(3);
	Plus plus5(5);

	std::cout << plus3(10) << std::endl; //함수를 object 처럼 호출해서 사용할 수 있게됨
	std::cout << plus5(10) << std::endl;
	return 0;

}

그런데 이 방법은 local variable 을 이용해서 fuction call operator 를 오버로딩한 함수를 호출한 것에 불과하다.
(연산자 오버로딩에 대해서 잘 모르면 이 부분부터 한 번더 살펴보고 오자.)

Lambda function

#include <iostream>

int main()
{
	auto lambdaPlus3 = [localVar = 3](int x)
	{
		return localVar + x;
	};

	std::cout << lambdaPlus3(10) << std::endl;

	return 0;
}

compiler exprorer 를 통해서 function object 를 이용해서 작성한 코드와 lamda fuction 으로 작성한 코드를 어셈블리어로 확인해보자


완전히 똑같은 것을 확인할 수 있다.

결국 코드로 볼때는 많이 다르지만 어셈블리어와 메모리상에서는 똑같이 작용한다는 것을 알 수 있다.

profile
남들에 비해 늦은 시작, 하나하나 차근차근

0개의 댓글