‫Olá e bem-vindo.
‫Nesta palestra, aprenderemos sobre referências e alternativas para ponteiros, e veremos por que eles são diferentes,
‫por que podemos querer usá-los.
‫Vamos mergulhar e ver.
‫Assim como os ponteiros, há um conceito relacionado muito semelhante chamado referência.
‫Agora, tanto os ponteiros quanto as referências são essencialmente apenas um endereço de memória.
‫Ambos armazenam uma referência de onde outra variável pode ser encontrada e, dessa forma, são incrivelmente
‫semelhantes.
‫A diferença entre os dois se resume basicamente a se eles podem ser reatribuídos.
‫Basicamente, eles podem apontar para um endereço diferente depois de terem sido criados?
‫No caso de um ponteiro, essa resposta é sim.
‫Você pode alterar um ponteiro para apontar para um novo endereço de memória, um novo ator, um novo componente sempre que
‫desejar, desde que tenha o tipo correto.
‫Uma referência, por outro lado, só pode ser configurada uma vez quando você a cria pela primeira vez para apontar para outra
‫variável.
‫Ele não pode ser alterado novamente.
‫E esse é um recurso de segurança porque o redirecionamento de variáveis pode levar a problemas em que
‫essas variáveis podem desaparecer ou onde você define esse ponteiro como nulo.
‫Um ponteiro nulo é essencialmente um ponteiro que aponta para nada e tentar fazer coisas com pontos que não definem nada
‫pode realmente travar seu mecanismo, o que não é um resultado ideal com referências porque você precisa dar a elas um valor
‫quando cria pela primeira vez eles.
‫Eles não podem ser nulos, então você não pode obter essas falhas de ponteiro nulo.
‫Então, vamos começar a dar uma olhada em algumas das sintaxes envolvidas.
‫Então, quando você acessa o conteúdo com um ponteiro, você precisa usar alguma sintaxe especial.
‫Você precisa colocar essa estrela na frente do ponteiro para ter certeza de que está obtendo o valor
‫no ponteiro, não o endereço de memória com referências, porque você nunca precisa realmente obter o endereço de memória.
‫Você pode simplesmente usar a variável como se fosse a variável para a qual está apontando.
‫Você não precisa usar nenhuma sintaxe especial.
‫Agora está acessando o endereço, então com ponteiros você pega o endereço automaticamente.
‫Ao usar a variável com uma referência, você deve usar uma sintaxe especial.
‫Para fazer isso, você deve usar o endereço do operador e obterá basicamente o mesmo
‫endereço da variável original.
‫E então há a alteração do endereço com um ponteiro.
‫Vimos que você pode atribuir o endereço e usar o endereço de opera para fazer isso com referências.
‫Isso não é permitido, então não há sintaxe para isso.
‫E, finalmente, e se quisermos alterar o valor para o qual estamos apontando, não o endereço, mas o valor
‫real que está sendo armazenado nesse endereço?
‫Bem, com os ponteiros, você tem que usar novamente alguma sintaxe especial.
‫Você tem que colocar essa estrela e depois atribuir algo.
‫Portanto, o ponteiro do ator você atribui ao ponteiro do ator estrela com referências novamente, porque você não pode alterar o
‫endereço real, não precisa de nenhuma sintaxe extra.
‫Podemos descartar a sintaxe extra e apenas ter a referência do ator igual.
‫Ator significa que você está substituindo o valor no local apontado.
‫Então tudo isso é um pouco teórico.
‫Vamos ter um exemplo real.
‫Então, se tivéssemos um flutuador que talvez estivesse armazenando o dano causado a nós no jogo e no qual estamos armazenando, o dano
‫atual é definido como zero.
‫Ninguém nos fez mal.
‫Agora, podemos querer criar uma referência a isso em vez de copiar, podemos querer passá-la
‫para uma função, mas sem realmente alterá-la.
‫A maneira como podemos fazer isso é ter um float e, em seguida, colocar o e comercial após o float.
‫E o e comercial diz que isso é uma referência a um float.
‫Não é um novo float em si, não aloca nenhuma memória float.
‫Ele apenas aloca memória de ponteiro.
‫E assim podemos chamar isso de ref danificado e podemos defini-lo igual a dano.
‫Nós não temos que pegar o endereço ou fazer algo assim.
‫Ele sabe automaticamente, bem, isso é uma referência e isso é uma variável.
‫Então, o que você está tentando fazer aqui é configurar uma referência para essa variável.
‫E com certeza, se formos e você logar, então podemos imprimir isso como se fosse apenas um float
‫regular para que possamos dizer dano de dois pontos e então porcentagem F e então aqui podemos fazer apenas um dano de impressão.
‫Ref Não precisamos de uma sintaxe especial.
‫Podemos usá-lo como uma variável regular.
‫Vamos em frente e aperte play depois de compilar, dê uma olhada no nosso log de saída e com certeza,
‫o dano está saindo em zero, que foi o valor que definimos.
‫Mas isso não prova necessariamente que não fiz uma cópia dessa variável original, então gostaria de
‫desafiá-lo a tentar alterar o valor e ver o que acontece.
‫Então use a referência, a referência ao dano, para definir um novo valor e, em seguida, imprima o valor
‫original para o valor original ao lado do valor de referência e dê uma olhada se eles são iguais ou são
‫diferentes?
‫Você só muda a referência, mas isso muda o original também?
‫Porque isso implicaria que ambos são a mesma variável de pausar o vídeo e tentar.
‫OK.
‫Bem vindo de volta.
‫Então vamos dar uma facada nisso.
‫Então, para mudar a referência agora, vamos fazer o dano ref igual.
‫E desta vez vou dizer o que causamos cinco danos e que não precisei usar nenhuma sintaxe especial
‫aqui.
‫Não está redirecionando a referência porque já a declaramos e configuramos sua referência nessa primeira linha
‫quando ela é criada.
‫Não podemos fazer isso de novo.
‫Então agora podemos apenas definir o valor.
‫Então, o que posso fazer agora é que temos a referência de dano aqui no log.
‫Vamos também colocar um dano e uma porcentagem f nessa mesma string e então passar o dano aqui também.
‫E então vamos compilar e dar uma olhada.
‫Vamos apertar play, entrar no nosso log de saída e com certeza, está imprimindo dano ref e dano como ambos tendo
‫o novo valor que definimos o valor de cinco.
‫Então, em essência, o que temos aqui são duas variáveis que apontam para o mesmo pedaço de memória.
‫Quase se poderia dizer que todas são a mesma variável, mas com nomes diferentes.
‫Portanto, isso tem a vantagem de não precisar de uma cópia, como um ponteiro, mas também tem muito mais benefícios porque
‫é muito mais fácil de usar.
‫Não precisamos de toda essa sintaxe extra e também é mais seguro usar.
‫Portanto, desde que não precisemos repintar nada, geralmente é preferível usar referências.
‫Agora vamos fazer uma rápida revisão de alguns dos símbolos que usamos aqui porque eles podem ficar um pouco confusos.
‫Eles são muito usados em C++.
‫Então, os símbolos do e comercial e da estrela, vamos dar uma olhada neles no contexto e no que eles significam.
‫Então, quando os estamos usando, quando os estamos usando em uma expressão, aqui estão alguns exemplos de código.
‫Você pode ver a estrela antes de uma variável.
‫Você pode ver o e comercial antes de uma variável.
‫O que isto significa?
‫Bem, com o símbolo de estrela, a sintaxe de colocá-lo antes da variável significa que estamos obtendo o
‫conteúdo do ponteiro do ator agora com o e comercial.
‫Se você colocar o e comercial na frente de uma variável ou na frente de uma referência a uma
‫variável, está dizendo que está obtendo o endereço dessa variável.
‫É obter o endereço do ator ou o endereço apontado pela referência.
‫Agora, quando estamos declarando que estamos usando, finalize o tipo de uma variável.
‫As estrelas e o e comercial têm significados quase opostos.
‫Portanto, a estrela significa que este é um ponteiro para um novo ator e o e comercial significa que esta é uma referência ao
‫ator r u.
‫Portanto, lembre-se de que há um conjunto completamente diferente de significados,
‫seja usando-os com uma variável em uma expressão ou usando-os no tipo que declara uma variável.
‫Agora, não vou entrar em muitos detalhes, mas para adicionar insulto à injúria, estes podem realmente ter outros
‫significados.
‫Em outro contexto, o e comercial pode significar um pouco sábio, e a estrela, como já vimos, pode
‫ser usada com strings no log U.
‫Portanto, isso não é necessariamente todos os significados desses dois símbolos, mas são
‫praticamente todos os significados importantes referentes a ponteiros e referências.
‫Coisas boas.
‫Assim, aprendemos sobre ponteiros, referências, como eles se relacionam entre si, como são diferentes e
‫por que podemos querer usá-los.
‫Vejo você na próxima palestra.