나는 연산자 < <과 연산자 >>의 오버로딩을 연구 중이다.istream 클래스의 operator <<에 C++에서 참조의 return/parameter 유형이있는 이유는 무엇입니까?
따라서 오버 라이드하려면 istream/ostream 클래스를 사용해야합니다.
하지만 재정의 된 연산자가 istream/ostream 객체를 참조로 가져 와서 참조를 반환하는 이유를 알지 못합니다.
설명 할 수 있습니까?
나는 연산자 < <과 연산자 >>의 오버로딩을 연구 중이다.istream 클래스의 operator <<에 C++에서 참조의 return/parameter 유형이있는 이유는 무엇입니까?
따라서 오버 라이드하려면 istream/ostream 클래스를 사용해야합니다.
하지만 재정의 된 연산자가 istream/ostream 객체를 참조로 가져 와서 참조를 반환하는 이유를 알지 못합니다.
설명 할 수 있습니까?
스트림 유형을 복사 할 수 없으며 작업을 스택 할 수 있기 때문에이 작업이 수행됩니다. std :: cin >> num1 >> num2; 등.
스트림 유형을 복사 할 수없는 경우 해당 유형 참조를 제외하고는 아무것도 될 수 없습니까? –
@SoronelHaetir은'std :: cin'과'std :: cout'와 같은 스트림 기반 타입은 복사가 불가능하다는 것을 의미합니다. 그들의 복사 생성자는 삭제됩니다. 컴파일러가 일치하는'operator << (x, y)'함수를 찾으려고 할 때, 정의 된 함수가'operator << (std :: cout, int)'이면 컴파일러는' std :: cout'을 사용할 수 없으므로 일치하지 않습니다. 이것을 참조로 만들면 컴파일러는'std :: cout'의 복사본을 만들 필요가 없으며 성공적으로 일치시킬 수 있습니다. – hadriel
친절한 답변을 주셔서 감사합니다 @hadriel! –
적어도 관련성이 있음 : https://stackoverflow.com/questions/2337213/return-value-of-operator-overloading-in-c – Tas
링크 –
에게 감사드립니다.이 글은 속임수이지만 원래 링크를 찾을 수 없습니다! – CinCout