auto k = 7;
로 하면 컴파일러가 7을 보고 k 가 int 타입인걸 알아내서
int k = 7;
로 하는것과 같은 코드를 만든다고 알고 있습니다
근데 다음 코드는 도무지 이해가 안되네요
std::map <std::string, int> map;
map에 데이타를 무작위로 왕창 넣어두고
아래 처럼 출력해보면 속도가 다릅니다
1번 방법
for ( const std::pair <std::string, int> &_pair : map )
std::cout << _pair.second << std::endl;
2번 방법
for ( const auto &_pair : map )
std::cout << _pair.second << std::endl;
속도를 빠르게 하기 위해 두경우 다 레퍼런스 타입을 썼고
auto를 이용해도 위에서 auto k = 7; 과 마찬가지로
컴파일 하면 1번과 2번이 같은 결과가 나와야 정상인데
막상 실행 해보면 항상 2번 방법이 빠르게 나옵니다
도데체 이유를 모르겠습니다
|
재미 있는 주제라서, 함 테스트 해 보았는데, 역시 auto를 사용한 방법이 더 빠르네요. (MS VS 2013)
그래서, map의 소스를 보니까, 답이 나오네요.
typedef pair<const _Kty, _Ty> value_type;
키에 해당하는 부분에 const가 붙어 있습니다.
for ( const std::pair <const std::string, int> &_pair : map ) 와 같이 하면 auto와 속도가 같게 됩니다.
const를 빼버리면 당연히 값에 대한 복사가 일어나서, 그만큼 시간이 더 걸리는 것입니다.