Passando valor para o parâmetro de referência const?
Pergunta
Não consegui encontrar uma pergunta semelhante aqui ou no Google, talvez porque não sei se estou fazendo a pergunta certa, então não tenho certeza se o título está correto.Mas estou trabalhando com um código parecido com este:
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-> ?
}
Solução
A variável foo
dentro de add
método é uma referência constante.Ele se comporta como um ponteiro no sentido de que não copia o objeto:você interage com ele como se fosse o próprio objeto.Ao contrário de um ponteiro, uma referência não pode ser NULL
, e não pode ser reatribuído.Você interage com ele usando um ponto .
operador em vez do ->
operador.
void add(const Foo & foo){
cout << foo.first_member << endl;
foo.const_member_function();
}
Desde foo
é uma referência constante, você pode ler foo
membros do, mas você não pode atribuí-los.Além disso, quaisquer chamadas de funções-membro no foo
referência são limitadas a funções explicitamente marcadas const
.
Chamando add
com um desreferenciado foo
está OK, desde que foo
não é NULL
.Fazendo uma referência desreferenciando um NULL
ponteiro é um comportamento indefinido.
Outras dicas
'foo' é uma referência constante.Você pode acessar seus membros via foo.fred, foo.method(), etc., mas não pode alterar nenhum membro de dados ou chamar métodos não const.