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