답변
아니요,이 작업을 수행해야하는 경우 다른 작업을 잘못하고있는 것입니다.
실제로 C++ 03에 따르면이 방법이 있지만 인기있는 컴파일러에서는 작동하지 않습니다. 자세한 내용은 내 대답을 참조하십시오. – vitaut
일반적으로 임시 참조를 const 참조에 사용하지 않도록 설정하는 방법이없는 것처럼 보입니다.
그러나, 나는 C++ 2003 표준에 인용하고자하는 입증 된 답을주고 : 이니셜식이 T2로, 클래스 타입를 rvalue이며, 경우
을 "CV1의 T1은"참조입니다 - 호환 가능 "cv2 T2"인 경우, 참조는 다음 중 한 가지 방법으로 바인딩됩니다. 선택은 구현에 따라 정의됩니다.
- 참조는 rvalue (3.10 참조)로 표현 된 객체 또는 그 하위 개체는 입니다.
- 임시 유형 "cv1 T2"[sic]가 생성되고 생성자가 호출되어 rvalue 개체 전체를 임시로 복사합니다. 참조는 임시 또는 하위 오브젝트 에 바인드됩니다. 93)
복사본을 만드는 데 사용되는 생성자는 복사본이 실제로 완료되었는지 여부에 관계없이 호출 가능해야합니다.
그래서 복사 생성자는 개인함으로써이 C++ 03에서 달성 될 수 있음을 보일 수 있습니다 :
struct A {
A() {}
private:
A(const A&);
};
int main() {
const A& a = A();
}
그러나,이 인기 컴파일러 작동하지 않습니다. 예를 들어 GCC는 위의 코드를 -std=c++03
플래그로 받아들입니다. 연타도이 코드를 허용하지만 경고 :
test.cc:8:12 : 경고 : C++ 98이 클래스에 대한 접근 복사 생성자가 필요합니다 'A' 임시에 대한 참조를 바인딩; 비공개였습니다
이렇게 표준을 따르지 않아도됩니다.
이 경우 액세스 가능 복사 생성자가 더 이상 필요하지 않습니다.
curiocity에서 벗어난 이유는 무엇입니까? –
나는 그것을 필요로하지 않는다. 단지 curiocity =를 묻는다.) – vitaut
예제는 어리 석다.하지만 참조가 const 인 경우 라하더라도, 어떤 객체에 직접 참조를 바인딩하고 싶을 수도있다. – curiousguy