• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

map을 공부하던중.. m.insert(pair<int, int>(i, i * 100));

23.07.30 20:41 작성 조회수 327

0

안녕하세요.

오늘 map 을 공부하던중..

pair<int,int>(i,i*100) -> 이 부분이 도대체 무슨 소리인지 모르겠더라구요.. 이름이 없어서 생성자도 아니고 operator도 아니고 1시간 구글링 결투끝에 임시객체라는 표현을 알게되었어요.

Q1

임시객체가 무엇을 반환하는지가 궁금합니다..!

코드상으로는 key 랑 value를 반환하는 것 같긴한데..

내부를 살펴볼려해도 외계어가 난무해서 물어봅니다

ㅠㅠ

 

 

제가 너무 깊게 알려는건지 아니면 기초지식이 부족한건지 잘모르겠네요 하하..

 

답변 2

·

답변을 작성해보세요.

1

image... (생략)

imagepair는 단순하게 struct이고 key, value 형태를 템플릿으로 받게 되어 있습니다.
image
직접 구현한다면 위와 같은 느낌인 것이죠.

C++에서 struct와 class는 거~의 차이가 없습니다.
struct로 객체를 만들 수 있는데, 그 객체 생성자를 통해
key는 i, value는 i*100을 넣어준 상태인 것이죠.

임시 객체란 말 그대로 임시로 사용하다 사용하는 객체,
즉 변수를 통하지 않고 넘긴 것을 의미하는데요.
image요렇게 만들어도 동일하겠지만 굳이 불필요하게 p라는 지역 변수를 사용할 필요는 없겠죠?
그래서 한 번에 insert(pair<int, int>(10, 100)) 형태로 사용하게 되는 것이고
임시 객체를 사용하면 최적화에도 도움이 됩니다. (이동 연산이 가능해서)

감사합니다 도움이 되었어요!

0

열심히하자님의 프로필

열심히하자

2023.07.31

강사님이 답변 해주시겠지만

pair<int,int>(i,i*100) => pair는 클래스 템플릿명이고 따라서 (i, i*100)은 생성자 호출이 맞지 않을ㄲㅏ요? (지금까지 배운 문법을 토대로요.)

임시객체도 이전 강의에서 설명 해주신것 같은데, 객체 생성할 때 이름이 없으면 임시 객체이고 그냥 객체랑 같다고 보시면 될 거 같아요. 굳이 차이점이라고 하면 이름이 없기 때문에 임시객체 생성과 동시에 콘스트 레퍼런스 등으로 기억하지 않으면 다음 줄부터 접근 못합니다(마치 3과같은 리터럴상수를 다음 줄에서 접근 못하는 것과 같죠)

그리고 객체는 함수가 아니므로 무엇을 반환한다기 보다는 그냥 객체는 객체입니다. pair가 key, value를 반환하는게 아니라 pair객체 내에 멤버 변수와 같은 형태로 first, second가 있고, (i,i*100)으로 각각 초기화했다가 그거를 나중에 -> 등으로 꺼내 사용 할 뿐이라고 유추가됩니다

pair는 구조체로 이루어져있는데 구조체는 객체가 아니지 않나요?

열심히하자님의 프로필

열심히하자

2023.08.01

강사님이 전에 언급하셨듯이 구조체랑 클래스랑 사실 다를게 없고 굳이 다른점은 기본 접근지정자가 public이냐 private 이냐 차이밖에 없습니다. 그래서 구조체로 선언하든 클래스로 선언하든 다 객체에요 (클래스=객체가 아니라 클래스를 이용해 데이터를 선언하면 객체가 되는거죠)

덧붙여서 몇몇 책에서는 그냥 변수도 객체라고 하는 경우도 있어요. 타입을 이용해 메모리에 실체화하는것이 객체라면, 구조체를 이용하든 클래스를 이용하든 기본타입을 이용하든 다 객체인거죠