2011-02-02 7 views
0

C++에서는 항상 Foo& f = _f;이라는 초기화를 사용하여 _f이라는 별칭을 만들었습니다. 그래서 그 시점부터 으로 전화 할 수 있습니다. 전화 번호는 _f입니다.C++에서 앨리어싱

getter 함수를 반환하는 별칭을 설정하는 곳에서이 작업을 시도했지만 작동하지 않는 것 같습니다. 어째서? 이것은 내가 노력하고있어입니다 ..

Foo &f = c->getFoo(); //where I have a pointer c that points to an object of type Foo. 
+2

'getFoo'는 무엇을 반환합니까? 이 함수가 작동하려면'getFoo'는 비 const에 대한 lvalue 참조를 반환해야합니다. – Philipp

+3

그것에 대해 작동하지 않는 것은 무엇입니까? – Falmarri

+0

임시 변수에 대한 참조를 만들 수 없습니다. –

답변

0

> = C-f를 getFoo을 푸 &을하고() 하지의 별칭입니다. 실제로 getFoo()의 반환 주소를 참조에 저장합니다 (getFoo()가 반환하는 것과 동일한 객체를 제공함).

getFoo()의 반환 유형에 따라 다릅니다. 예를 들어, getFoo()가 Foo &을 리턴하면 작동합니다. getFoo()가 const Foo &을 반환하면 Foo const & f = getFoo()를 수행해야합니다.

그러나 두 경우 모두 getFoo에 의해 반환 된 객체가 getFoo() 범위 (일시적이 아닌지 확인)뿐만 아니라 c 클래스 범위에서도 사용할 수 있도록해야합니다.

1

선언을 보지 않고 나는 임시 문제가 아닌 const 참조를 얻을 수 없다고 가정합니다. 그래서

Foo const&f = c->getFoo(); 

하지만

Foo f(c->getFoo()); 

은 아마 잘 작동.

+0

그래서 별칭이 작동하려면 getFoo()에서 반환 된 결과가 일정해야합니다? – waterbo

+0

참조를 반환하는 경우 동일한 CV 자격으로 참조에 바인딩해야합니다. 값을 반환하면 const 참조에만 바인드 할 수 있습니다 (값이 const인지는 중요하지 않음).이 경우 할당하면 잘 작동합니다. – AProgrammer