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

} 
Foi útil?

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 foomembros 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top