﻿1
00:00:04,370 --> 00:00:05,510
‫Olá e bem-vindo.

2
00:00:05,510 --> 00:00:12,020
‫Nesta palestra, aprenderemos sobre referências e alternativas para ponteiros, e veremos por que eles são diferentes,

3
00:00:12,020 --> 00:00:14,600
‫por que podemos querer usá-los.

4
00:00:14,870 --> 00:00:16,100
‫Vamos mergulhar e ver.

5
00:00:17,280 --> 00:00:22,980
‫Assim como os ponteiros, há um conceito relacionado muito semelhante chamado referência.

6
00:00:23,340 --> 00:00:28,920
‫Agora, tanto os ponteiros quanto as referências são essencialmente apenas um endereço de memória.

7
00:00:28,930 --> 00:00:36,420
‫Ambos armazenam uma referência de onde outra variável pode ser encontrada e, dessa forma, são incrivelmente

8
00:00:36,420 --> 00:00:37,020
‫semelhantes.

9
00:00:37,260 --> 00:00:43,080
‫A diferença entre os dois se resume basicamente a se eles podem ser reatribuídos.

10
00:00:43,090 --> 00:00:48,420
‫Basicamente, eles podem apontar para um endereço diferente depois de terem sido criados?

11
00:00:48,780 --> 00:00:51,270
‫No caso de um ponteiro, essa resposta é sim.

12
00:00:51,630 --> 00:00:57,600
‫Você pode alterar um ponteiro para apontar para um novo endereço de memória, um novo ator, um novo componente sempre que

13
00:00:57,600 --> 00:00:59,610
‫desejar, desde que tenha o tipo correto.

14
00:01:00,180 --> 00:01:06,360
‫Uma referência, por outro lado, só pode ser configurada uma vez quando você a cria pela primeira vez para apontar para outra

15
00:01:06,360 --> 00:01:06,870
‫variável.

16
00:01:07,200 --> 00:01:09,240
‫Ele não pode ser alterado novamente.

17
00:01:09,540 --> 00:01:16,230
‫E esse é um recurso de segurança porque o redirecionamento de variáveis pode levar a problemas em que

18
00:01:16,230 --> 00:01:21,210
‫essas variáveis podem desaparecer ou onde você define esse ponteiro como nulo.

19
00:01:21,480 --> 00:01:27,990
‫Um ponteiro nulo é essencialmente um ponteiro que aponta para nada e tentar fazer coisas com pontos que não definem nada

20
00:01:27,990 --> 00:01:35,010
‫pode realmente travar seu mecanismo, o que não é um resultado ideal com referências porque você precisa dar a elas um valor

21
00:01:35,010 --> 00:01:37,140
‫quando cria pela primeira vez eles.

22
00:01:37,500 --> 00:01:41,490
‫Eles não podem ser nulos, então você não pode obter essas falhas de ponteiro nulo.

23
00:01:42,030 --> 00:01:45,520
‫Então, vamos começar a dar uma olhada em algumas das sintaxes envolvidas.

24
00:01:45,720 --> 00:01:50,850
‫Então, quando você acessa o conteúdo com um ponteiro, você precisa usar alguma sintaxe especial.

25
00:01:50,850 --> 00:01:55,860
‫Você precisa colocar essa estrela na frente do ponteiro para ter certeza de que está obtendo o valor

26
00:01:55,860 --> 00:02:01,050
‫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.

27
00:02:01,260 --> 00:02:06,200
‫Você pode simplesmente usar a variável como se fosse a variável para a qual está apontando.

28
00:02:06,210 --> 00:02:08,190
‫Você não precisa usar nenhuma sintaxe especial.

29
00:02:08,910 --> 00:02:15,180
‫Agora está acessando o endereço, então com ponteiros você pega o endereço automaticamente.

30
00:02:15,480 --> 00:02:18,690
‫Ao usar a variável com uma referência, você deve usar uma sintaxe especial.

31
00:02:18,690 --> 00:02:24,450
‫Para fazer isso, você deve usar o endereço do operador e obterá basicamente o mesmo

32
00:02:24,450 --> 00:02:26,430
‫endereço da variável original.

33
00:02:27,270 --> 00:02:30,690
‫E então há a alteração do endereço com um ponteiro.

34
00:02:30,690 --> 00:02:35,790
‫Vimos que você pode atribuir o endereço e usar o endereço de opera para fazer isso com referências.

35
00:02:35,800 --> 00:02:37,890
‫Isso não é permitido, então não há sintaxe para isso.

36
00:02:38,100 --> 00:02:43,800
‫E, finalmente, e se quisermos alterar o valor para o qual estamos apontando, não o endereço, mas o valor

37
00:02:43,800 --> 00:02:45,960
‫real que está sendo armazenado nesse endereço?

38
00:02:46,350 --> 00:02:50,730
‫Bem, com os ponteiros, você tem que usar novamente alguma sintaxe especial.

39
00:02:50,730 --> 00:02:53,220
‫Você tem que colocar essa estrela e depois atribuir algo.

40
00:02:53,220 --> 00:03:00,210
‫Portanto, o ponteiro do ator você atribui ao ponteiro do ator estrela com referências novamente, porque você não pode alterar o

41
00:03:00,210 --> 00:03:03,240
‫endereço real, não precisa de nenhuma sintaxe extra.

42
00:03:03,240 --> 00:03:07,170
‫Podemos descartar a sintaxe extra e apenas ter a referência do ator igual.

43
00:03:07,170 --> 00:03:12,690
‫Ator significa que você está substituindo o valor no local apontado.

44
00:03:12,900 --> 00:03:14,220
‫Então tudo isso é um pouco teórico.

45
00:03:14,220 --> 00:03:16,170
‫Vamos ter um exemplo real.

46
00:03:16,170 --> 00:03:24,480
‫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

47
00:03:24,480 --> 00:03:26,610
‫atual é definido como zero.

48
00:03:26,610 --> 00:03:28,080
‫Ninguém nos fez mal.

49
00:03:28,500 --> 00:03:33,840
‫Agora, podemos querer criar uma referência a isso em vez de copiar, podemos querer passá-la

50
00:03:33,840 --> 00:03:36,690
‫para uma função, mas sem realmente alterá-la.

51
00:03:37,110 --> 00:03:42,510
‫A maneira como podemos fazer isso é ter um float e, em seguida, colocar o e comercial após o float.

52
00:03:42,750 --> 00:03:45,360
‫E o e comercial diz que isso é uma referência a um float.

53
00:03:45,360 --> 00:03:49,410
‫Não é um novo float em si, não aloca nenhuma memória float.

54
00:03:49,410 --> 00:03:51,150
‫Ele apenas aloca memória de ponteiro.

55
00:03:51,630 --> 00:03:56,910
‫E assim podemos chamar isso de ref danificado e podemos defini-lo igual a dano.

56
00:03:56,910 --> 00:04:00,120
‫Nós não temos que pegar o endereço ou fazer algo assim.

57
00:04:00,450 --> 00:04:04,470
‫Ele sabe automaticamente, bem, isso é uma referência e isso é uma variável.

58
00:04:04,470 --> 00:04:08,550
‫Então, o que você está tentando fazer aqui é configurar uma referência para essa variável.

59
00:04:08,820 --> 00:04:15,840
‫E com certeza, se formos e você logar, então podemos imprimir isso como se fosse apenas um float

60
00:04:15,840 --> 00:04:24,120
‫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.

61
00:04:24,120 --> 00:04:25,830
‫Ref Não precisamos de uma sintaxe especial.

62
00:04:25,830 --> 00:04:28,230
‫Podemos usá-lo como uma variável regular.

63
00:04:28,440 --> 00:04:33,930
‫Vamos em frente e aperte play depois de compilar, dê uma olhada no nosso log de saída e com certeza,

64
00:04:33,930 --> 00:04:37,470
‫o dano está saindo em zero, que foi o valor que definimos.

65
00:04:37,740 --> 00:04:43,170
‫Mas isso não prova necessariamente que não fiz uma cópia dessa variável original, então gostaria de

66
00:04:43,170 --> 00:04:46,980
‫desafiá-lo a tentar alterar o valor e ver o que acontece.

67
00:04:46,980 --> 00:04:54,030
‫Então use a referência, a referência ao dano, para definir um novo valor e, em seguida, imprima o valor

68
00:04:54,030 --> 00:05:01,260
‫original para o valor original ao lado do valor de referência e dê uma olhada se eles são iguais ou são

69
00:05:01,260 --> 00:05:01,740
‫diferentes?

70
00:05:01,740 --> 00:05:05,160
‫Você só muda a referência, mas isso muda o original também?

71
00:05:05,160 --> 00:05:10,560
‫Porque isso implicaria que ambos são a mesma variável de pausar o vídeo e tentar.

72
00:05:13,850 --> 00:05:14,360
‫OK.

73
00:05:14,360 --> 00:05:15,060
‫Bem vindo de volta.

74
00:05:15,080 --> 00:05:16,280
‫Então vamos dar uma facada nisso.

75
00:05:16,730 --> 00:05:22,280
‫Então, para mudar a referência agora, vamos fazer o dano ref igual.

76
00:05:22,280 --> 00:05:27,290
‫E desta vez vou dizer o que causamos cinco danos e que não precisei usar nenhuma sintaxe especial

77
00:05:27,290 --> 00:05:27,580
‫aqui.

78
00:05:27,590 --> 00:05:33,080
‫Não está redirecionando a referência porque já a declaramos e configuramos sua referência nessa primeira linha

79
00:05:33,080 --> 00:05:34,580
‫quando ela é criada.

80
00:05:34,820 --> 00:05:36,170
‫Não podemos fazer isso de novo.

81
00:05:36,320 --> 00:05:38,870
‫Então agora podemos apenas definir o valor.

82
00:05:39,470 --> 00:05:45,830
‫Então, o que posso fazer agora é que temos a referência de dano aqui no log.

83
00:05:46,070 --> 00:05:56,510
‫Vamos também colocar um dano e uma porcentagem f nessa mesma string e então passar o dano aqui também.

84
00:05:57,650 --> 00:06:00,410
‫E então vamos compilar e dar uma olhada.

85
00:06:00,740 --> 00:06:08,480
‫Vamos apertar play, entrar no nosso log de saída e com certeza, está imprimindo dano ref e dano como ambos tendo

86
00:06:08,480 --> 00:06:12,200
‫o novo valor que definimos o valor de cinco.

87
00:06:12,380 --> 00:06:18,650
‫Então, em essência, o que temos aqui são duas variáveis que apontam para o mesmo pedaço de memória.

88
00:06:18,650 --> 00:06:22,130
‫Quase se poderia dizer que todas são a mesma variável, mas com nomes diferentes.

89
00:06:22,430 --> 00:06:28,580
‫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

90
00:06:28,580 --> 00:06:30,710
‫é muito mais fácil de usar.

91
00:06:30,710 --> 00:06:33,650
‫Não precisamos de toda essa sintaxe extra e também é mais seguro usar.

92
00:06:33,650 --> 00:06:39,140
‫Portanto, desde que não precisemos repintar nada, geralmente é preferível usar referências.

93
00:06:39,320 --> 00:06:44,780
‫Agora vamos fazer uma rápida revisão de alguns dos símbolos que usamos aqui porque eles podem ficar um pouco confusos.

94
00:06:44,780 --> 00:06:47,210
‫Eles são muito usados em C++.

95
00:06:47,210 --> 00:06:52,250
‫Então, os símbolos do e comercial e da estrela, vamos dar uma olhada neles no contexto e no que eles significam.

96
00:06:52,910 --> 00:06:59,990
‫Então, quando os estamos usando, quando os estamos usando em uma expressão, aqui estão alguns exemplos de código.

97
00:06:59,990 --> 00:07:03,560
‫Você pode ver a estrela antes de uma variável.

98
00:07:03,560 --> 00:07:06,140
‫Você pode ver o e comercial antes de uma variável.

99
00:07:06,530 --> 00:07:07,370
‫O que isto significa?

100
00:07:08,240 --> 00:07:15,920
‫Bem, com o símbolo de estrela, a sintaxe de colocá-lo antes da variável significa que estamos obtendo o

101
00:07:16,280 --> 00:07:20,900
‫conteúdo do ponteiro do ator agora com o e comercial.

102
00:07:20,930 --> 00:07:25,880
‫Se você colocar o e comercial na frente de uma variável ou na frente de uma referência a uma

103
00:07:25,880 --> 00:07:28,880
‫variável, está dizendo que está obtendo o endereço dessa variável.

104
00:07:28,880 --> 00:07:32,450
‫É obter o endereço do ator ou o endereço apontado pela referência.

105
00:07:32,780 --> 00:07:37,550
‫Agora, quando estamos declarando que estamos usando, finalize o tipo de uma variável.

106
00:07:37,760 --> 00:07:41,150
‫As estrelas e o e comercial têm significados quase opostos.

107
00:07:41,570 --> 00:07:51,050
‫Portanto, a estrela significa que este é um ponteiro para um novo ator e o e comercial significa que esta é uma referência ao

108
00:07:51,050 --> 00:07:52,370
‫ator r u.

109
00:07:52,640 --> 00:07:57,350
‫Portanto, lembre-se de que há um conjunto completamente diferente de significados,

110
00:07:57,350 --> 00:08:03,320
‫seja usando-os com uma variável em uma expressão ou usando-os no tipo que declara uma variável.

111
00:08:03,560 --> 00:08:08,270
‫Agora, não vou entrar em muitos detalhes, mas para adicionar insulto à injúria, estes podem realmente ter outros

112
00:08:08,270 --> 00:08:08,750
‫significados.

113
00:08:08,750 --> 00:08:15,140
‫Em outro contexto, o e comercial pode significar um pouco sábio, e a estrela, como já vimos, pode

114
00:08:15,140 --> 00:08:17,780
‫ser usada com strings no log U.

115
00:08:18,050 --> 00:08:22,550
‫Portanto, isso não é necessariamente todos os significados desses dois símbolos, mas são

116
00:08:22,550 --> 00:08:26,360
‫praticamente todos os significados importantes referentes a ponteiros e referências.

117
00:08:26,660 --> 00:08:27,290
‫Coisas boas.

118
00:08:27,290 --> 00:08:32,300
‫Assim, aprendemos sobre ponteiros, referências, como eles se relacionam entre si, como são diferentes e

119
00:08:32,540 --> 00:08:34,400
‫por que podemos querer usá-los.

120
00:08:34,430 --> 00:08:35,900
‫Vejo você na próxima palestra.

