C++ 公有方法返回vector与私有vector不是同一个
黄舟
黄舟 2017-04-17 15:29:27
0
3
854
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

모든 응답(3)
巴扎黑

물론 반환된 벡터 값은 동일한 주소가 아니며 반환된 벡터 값이 복사되었습니다.
포인터와 const 포인터를 반환할 수 있습니다.

左手右手慢动作

에서 반환된 값은 물론 복사되었습니다. 믿을 수 없다면 GetcomputerFishes의 반환 값을 변경하여 this->computerFishes의 데이터가 일치하는지 확인할 수 있습니다

.
Peter_Zhu

주소는 왜 다른가요?

GetcomputerFishes 함수의 반환 값 유형은 vector<ComputerFish *>, 즉 값으로 반환되는 동시에 반환 문의 표현식은 computerFishes이므로 여기서는 임시 객체가 복사되고 먼저 생성된 다음 임시 객체가 반환됩니다(참고: 복사 생략으로 인해 이 임시 객체는 실제 런타임 중에 실제로 복사 및 생성되지 않을 수 있습니다). 즉, 반환되는 객체는 MyClass의 멤버변수가 아니고, 이 멤버변수를 복사하여 생성한 임시객체이므로 주소가 다르다. (참고: 값으로 호출할 때 표현식 유형은 rvalue입니다. 사용자 코드는 반환 값의 주소를 직접 가져올 수 없습니다. 즉, &x.GetcomputerFishes()할 수 없습니다. 하지만 lvalue로 변환한 후 주소를 가져올 수 있습니다.)

GetcomputerFishes에서 반환된 개체를 ComputerFishes로 만드는 방법은 무엇입니까?

이 함수가 MyClass의 전용 멤버인computerFishes를 반환하도록 하려면 참조로 반환을 사용할 수 있습니다.

으아악

이 함수 오버로드 세트는 각각 const MyClass 객체와 non-const MyClass 객체에 대한 지원을 제공합니다.

그런 다음 반환 값을 사용하여 참조 변수를 초기화할 수 있습니다(비참조 변수를 초기화하고 초기화 복사할 수도 있음).

으아악

물론 함수 반환 값을 통해 직접 액세스할 수도 있습니다.

으아악
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿