문제

지 않았습니다 비슷한 질문에 여기에,또는 Google 을 통해 어쩌면 알 수 없기 때문에 나면 오른쪽 질문,그래서 확실하지 않는 경우 제목은 옳습니다.하지만 나는 코드는 다음과 같습니다.

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-> ?

} 
도움이 되었습니까?

해결책

변수 fooadd 방법은 상수 참조.그것처럼 동작하는 포인터에서 의미하지 않는다는 사본을 개체:당신은 그것과 상호 작용된 것처럼 보이지만 실제로는 객체에 자체입니다.과는 달리,포인터를 참조할 수 없 NULL, 며,그것은 다시 지정할 수 없습니다.당신은 상호 작용과 함께 사용하여 그것을 점 . 연산자를 대신에 -> 연산자입니다.

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

foo 지속적인 참조를 읽을 수 있습니다 foo의 멤버,하지만 당신은 할당할 수 없습니다.또한,어떤 통화의 멤버 기능 foo 참조한 기능을 명시적으로 표시 const.

전화 add 와 역참조 foo OK,로 fooNULL.기에 참조 참조로 인해 NULL 포인터가 정의되지 않은 행동이다.

다른 팁

'foo' is a constant reference. You can access its members via foo.fred, foo.method(), etc., but you can't change any data members or call any non-const methods.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top