smile blog 2023. 4. 22. 15:58
auto를 이용한 쉬운 변수 선언
  • auto 키워드는 C++11 표준부터 의미가 수정되어, 변수 선언문으로부터 변수의 타입을 추론하여 결정하도록 지시한다.
  • auto는 복잡한 형식의 변수 선언을 간소하게 해주며, 타입 선언의 오타나 번거로움을 줄일 수 있게 한다.

 

- 기본 사례

auto pi = 3.14;	// 3.14가 실수이므로 pi는 double 타입으로 선언됨

=> auto를 이용하여 변수 pi를 실수 3.14로 초기화하는 선언문

 

auto n = 3;	// 3이 정수이므로 n을 int로 선언
auto *p = &n;	// 변수 p는 int* 타입으로 자동 선언

=>  컴파일러 3.14로부터 추론한 결과 pi를 dobule 타입으로 결정

 

int n = 10;
int &ref = n;	// ref는 int에 대한 참조 변수로 선언
auto ref2 = ref;	// ref2는 int& 타입의 변수로 자동 선언

=> 다음과 같이 참조 변수의 선언에도 auto를 사용할 수 있음

 

 

- 함수의 리턴 타입으로부터 추론하여 변수 타입 선언

int square(int x)
{
	return x*x;
}
auto ret = square(3);	// 변수 ret는 int 타입으로 자동 선언
  • 컴파일러는 square( )의 리턴 타입이 int이므로 변수 ret의 타입을 int로 추론한다.
  • square( ) 함수가 double을 리턴하는 함수로 수정되면 변수 ret의 타입도 double 타입으로 자동 결정되는데, auto는 코드의 수정에 따라 오류 가능성을 낮추는 효과가 있다

 

- STL 템플릿에 활용

auto 를 vector, map 등의 템플릿에 사용하면 복잡한 변수 선언을 간소화할 수 있다

vector<int> v = {1,2,3,4,5};	// 벡터 v에 5개의 원소 1,2,3,4,5 삽입

==> 정수 1,2,3,4,5를 저장하는 벡터 v를 선언

 

vector<int>::iterator it;	// 복잡한 모양의 it 변수 선언
for (it = v.begin(); it != v.end(); it++)
	cout << *it << endl;

=> iterator를 이용하여 벡터 v의 원소를 출력하는 코드

 

for (auto it = v.begin(); it != v.end(); it++)	// 변수 it는 vector<int>::iterator
	cout << *it << endl;			// 타입으로 추론됨

=> auto를 이용하여 변수 it를 선언하면 다음과 같이 간략히 작성할 수 있음


람다 대수와 람다식

C++11부터 도입된 람다는 람다 대수 (lambda calculus)에서 유래한다.

람다 대수에서 람다식(lambda expression)은 수학의 함수를 단순하게 표현하는 방법

다음은 x, y의 합을 계산하는 수학 함수 f를 보여준다

 

f(x, y) = x + y	//x, y의 합을 구하는 수학의 함수

 

이를 수학의 람다식으로 바꾸면, 다음과 같이 이름을 빼고 간소하게 표현

(x, y) -> x + y

 

정리하면 수학에서 이름 없는 함수를 람다식이라고 부른다.

그리고 다음과 같이 괄호와 함께 x, y에 대입될 값을 지정하면 람다식의 계산이 이루어진다.

이 람다시


C++에서 람다식 선언

 

 

간단한 람다식 만들기

 

 

 

 

auto로 람다식 저장 및 호출

 

 

 

 

캡쳐 리스트와 리턴 타입을 가지는 람다식 만들기

 

 

 

STL 템플릿에 람다식 활용

 

 

 

 

C++에서 람다식의 의미