Передача значения в постоянный ссылочный параметр?

StackOverflow https://stackoverflow.com//questions/23050367

  •  21-12-2019
  •  | 
  •  

Вопрос

Я не смог найти подобный вопрос здесь или через 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-> ?

} 
Это было полезно?

Решение

Переменная foo внутри add метод - это постоянная ссылка.Он ведет себя как указатель в том смысле, что он не копирует объект:вы взаимодействуете с ним так, как если бы это был сам объект.В отличие от указателя, ссылка не может быть NULL, и он не может быть переназначен.Вы взаимодействуете с ним, используя точку . оператор вместо -> оператор.

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

С тех пор как foo это постоянная ссылка, вы можете прочитать fooучастники, но вы не можете их назначить.Кроме того, любые вызовы функций-членов на foo ссылки ограничены функциями, явно помеченными const.

Зовущий add с разыменованным foo все в порядке, до тех пор, пока foo это не так NULL.Создание ссылки путем разыменования a 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