티스토리 뷰
C++/Effective Modern C++
[Effective Modern C++] 항목 2. auto의 형식 연역 규칙을 숙지하라
pppgod 2019. 8. 25. 16:22auto 의 형식 연역 규칙은 template 과 거의 모든 부분이 일치한다. 그러므로 항목 1을 먼저 보기를 추천한다.
template 과 차이가 생기는 부분은 바로 균일 초기화(Uniform initialization)를 사용하는 경우이다.
int x1 = 27;
int x2(27);
int x3 = { 27 }; // Uniform initialization
int x4{ 27 }; // Uniform initialization
여기서 int 를 auto 로 변경해보자.
auto x1 = 27; // int
auto x2(27); // int
auto x3 = { 27 }; // std::initializer_list<int>
auto x4{ 27 }; // std::initializer_list<int>
x3 과 x4 처럼 균일 초기화를 하는 경우에는 int 가 아닌 std::initializer_list 의 형태로 타입이 지정되는 것을 볼 수 있다. 추측이지만 초기화하는데 사용한 중괄호의 의미가 컴파일러가 해석하기에 모호하기 때문에 발생하는 것으로 보인다.
2014년 11월에 직접 초기화 구문을 이용한 경우에는 std::initializer_list 로 받지 않게 되었다. 즉 x4 의 경우에는 현재 int 로 타입이 지정된다. 컴파일러에 따라 다른 결과가 나타날 수 있으니 주의하자
참고 서적
스콧 마이어스, Effective Modern C++
'C++ > Effective Modern C++' 카테고리의 다른 글
[Effective Modern C++] 항목 6. auto가 원치 않은 형식으로 연역될 때에는 명시적 형식의 초기치를 사용하라 (0) | 2019.09.08 |
---|---|
[Effective Modern C++] 항목 5. 명시적 형식 선언보다는 auto를 선호하라 (0) | 2019.09.08 |
[Effective Modern C++] 항목 4. 연역된 형식을 파악하는 방법을 알아두라 (0) | 2019.09.02 |
[Effective Modern C++] 항목 3. decltype의 작동 방식을 숙지하라 (0) | 2019.09.02 |
[Effective Modern C++] 항목 1. 템플릿 형식 연역 규칙을 숙지하라 (1) | 2019.08.25 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 다이소
- auto
- Overloading
- 포인터
- const
- detach
- Effective
- CPP
- Forwarding
- forward
- std::move
- Join
- Future
- C
- Unreal
- std::forward
- C++
- C++11
- C++14
- Perfect
- 보편참조
- 람다
- Modern
- async
- 보편 참조
- Effective Modern C++
- 발아시기
- Override
- MOVE
- thread
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함