먼저 답변해주신 박우성님과 빌더님께 감사드립니다
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의 타입이
<const std::string, int>라는 빌더님의 설명에 좀 놀랐습니다
auto가 단순히 타이핑 노가다만 줄여주는거로 알았는데
그게 아니었네요
제가 의문이 더 커지게 된건 박우성님 답변내용 때문인데요
<const std::string, int>에서 const가 빠지는 바람에
string 값의 복사가 일어나서 그 만큼 시간이 더 걸린다고 하셨습니다
근데 제가 알고있기론, 그리고 테스트 해본 결과에 따르면
void func (const std::string str) 과
void func (std::string str) 은
const 있고 없고 상관없이 두 경우 다 복사가 일어납니다
class C {}; 가 있을 때
func (const C obj) 와 func (C obj) 도 호출해보면 마찬가집니다
const는 값을 변경하지 못하게 금지할뿐, 포인터가 아니라
두 경우 다 복사가 일어나서 다를게 없잖아요
auto를 사용한 속도가 더 빠른 이유에 의문점이 더 커졌습니다
|