2014-04-14 7 views
1

내가 올바른 질문을하고 있는지 잘 모르기 때문에 여기 또는 Google을 통해 비슷한 질문을 찾을 수 없었습니다. 제목이 맞는지 확실하지 않습니다. 하지만 다음과 같습니다 코드로 일하고 있어요 :const 참조 매개 변수에 값을 전달 하시겠습니까?

Foo * foo = new Foo(); 
add(*foo); //Couldnt find any similar questions on this syntax? 

void add(const Foo & foo){ 

//What exactly is foo here? How can i manipulate its members, foo. or foo-> ? 

} 

답변

0

변수 fooadd 방법 내부 것은 상수 참조입니다. 그것은 마치 객체를 복사하지 않는다는 의미에서 포인터처럼 작동합니다 : 객체 자체처럼 상호 작용합니다. 포인터와 달리 참조는 NULL이 될 수 없으며 다시 할당 할 수 없습니다. -> 연산자 대신 점 . 연산자를 사용하여 상호 작용합니다. foo 이후

void add(const Foo & foo){ 
    cout << foo.first_member << endl; 
    foo.const_member_function(); 
} 

이 일정한 기준, 당신은 foo의 회원을 읽을 수는 있지만 할당 할 수 없습니다. 또한 foo 참조의 멤버 함수 호출은 명시 적으로 const으로 표시된 함수로 제한됩니다.

fooNULL이 아닌 한 foo이 역 참조 된 add을 호출해도 괜찮습니다. NULL 포인터를 역 참조하여 참조를 만드는 것은 정의되지 않은 동작입니다.

+0

포인터 자체가 아니라 객체 자체처럼 작동합니다. – EJP

+0

@ EJP 포인터처럼 행동하는 참조에 대한 요점을 분명히했습니다. – dasblinkenlight

3

'foo'는 상수입니다. foo.fred, foo.method() 등을 통해 멤버에 액세스 할 수 있지만 데이터 멤버를 변경하거나 비 const 메소드를 호출 할 수는 없습니다.

관련 문제