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++에서 람다식의 의미
'C++ > [책 정리] 명품 C++ 프로그래밍' 카테고리의 다른 글
2. 함수 호출 시 객체 전달 (0) | 2023.04.22 |
---|---|
1. 함수의 인자 전달 방식 리뷰 (0) | 2023.04.22 |
4. C++ 표준 템플릿 라이브러리(STL)와 활용 (0) | 2023.04.22 |
3. 제네릭 클래스 만들기 (0) | 2023.04.22 |
2. 다양한 제네릭 함수 만들기 (0) | 2023.04.22 |