-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path1.2.6.TypeInference.cpp
42 lines (33 loc) · 1.3 KB
/
1.2.6.TypeInference.cpp
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
32
33
34
35
36
37
38
39
40
41
42
// 타입 추론
/*
타입 추론(Type Inference)이란 표현식의 타입을 컴파일러가 스스로 알아내는 기능이다.
관련된 키워드로는 auto와 decltype이 있다.
*/
// auto 키워드
/*
auto 키워드는 다음과 같이 다양한 상황에서 사용한다.
- 함수의 리턴 타입을 추론한다.
- 구조적 바인딩에 사용한다.
- 표현식의 타입을 추론한다.
- 비타입(non-type) 템플릿 매개변수의 타입을 추론한다. (12장 참조)
- decltype(auto)에서 사용한다. (12장 참조)
- 함수에 대한 또 다른 문법으로 사용한다. (12장 참조)
- 제네릭 람다 표현식에서 사용한다. (18장 참조)
auto x = 123; // int
auto result = getFoo();
auto로 표현식의 타입을 추론하면 함수에 지정된 레퍼런스나 const 한정자가 제거된다.
auto를 지정하면 레퍼런스와 const 한정자가 사라지기 때문에 값이 복제되어 버린다.
const 레퍼런스 타입으로 지정하려면 다음과 같이 auto 키워드 앞뒤에 레퍼런스 타입과 const 키워드를 붙인다.
const auto& f2 = foo();
*/
// decltype 키워드
/*
decltype 키워드는 인수로 지정한 표현식의 타입을 알아낸다.
int x = 123;
decltype(x) y = 456;
이렇게 작성하면 컴파일러는 y의 타입이 x의 타입인 int라고 추론한다.
decltype은 레퍼런스나 const 한정자를 삭제하지 않는다는 점에서 auto와 다르다.
decltype(foo()) f2 = foo();
얼핏보면 decltype을 사용한다고 해서 특별히 나아질 게 없다고 생각할 수 있겠지만
템플릿을 사용할 때 상당히 강력한 효과를 발휘한다. (12장, 22장 참조)
*/