티스토리 뷰

 auto 의 형식 연역 규칙은 template 과 거의 모든 부분이 일치한다. 그러므로 항목 1을 먼저 보기를 추천한다.

https://pppgod.tistory.com/14

불러오는 중입니다...

 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++

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함