Compartilhar via


Referências (C++)

Uma referência, como um ponteiro, armazena o endereço de um objeto localizado em outro lugar na memória. Ao contrário de um ponteiro, uma referência depois de inicializada não pode ser feita para se referir a um objeto diferente ou definir como nulo. Há dois tipos de referências: referências lvalue que se referem a uma variável nomeada e referências rvalue que se referem a um objeto temporário. O & operador significa uma referência lvalue e o && operador significa uma referência rvalue ou uma referência universal (rvalue ou lvalue) dependendo do contexto.

As referências podem ser declaradas usando a seguinte sintaxe:

[especificadores de classe de armazenamento] [qualificadores de cv] especificadores de tipo [modificador de ms] declarador [=expressão];

Qualquer declarador válido que especifique uma referência pode ser usado. A menos que se trate de uma referência para um tipo de matriz ou função, a seguinte sintaxe simplificada se aplica:

[especificadores de classe de armazenamento] [qualificadores de cv] especificadores de tipo [& ou &&] [qualificadores de cv] identificador [=expressão];

As referências são declaradas usando a seguinte sequência:

  1. Os especificadores da declaração:

    • Um especificador de classe de armazenamento opcional.
    • Opcional const e/ou volatile qualificadores.
    • O especificador de tipo: o nome de um tipo.
  2. O declarador:

    • Um modificador opcional específico da Microsoft. Para obter mais informações, consulte Modificadores específicos da Microsoft.

    • O operador & ou operador &&.

    • Opcional const e/ou volatile qualificadores.

    • O identificador.

  3. Um inicializador opcional.

Os formatos mais complexos de declaradores associados a ponteiros para matrizes e funções também se aplicam às referências a matrizes e funções. Para obter mais informações, consulte ponteiros.

Vários declaradores e inicializadores podem aparecer em uma lista separada por vírgulas após um único especificador de declaração. Por exemplo:

int &i;
int &i, &j;

As referências, os ponteiros e os objetos podem ser declarados juntos:

int &ref, *ptr, k;

Uma referência contém o endereço de um objeto, mas se comporta sintaticamente como um objeto.

No programa a seguir, observe que o nome do objeto, s, e a referência ao objeto, SRef, podem ser usados de forma idêntica em programas:

Exemplo

// references.cpp
#include <stdio.h>
struct S {
   short i;
};

int main() {
   S  s;   // Declare the object.
   S& SRef = s;   // Declare and initialize the reference.
   s.i = 3;

   printf_s("%d\n", s.i);
   printf_s("%d\n", SRef.i);

   SRef.i = 4;
   printf_s("%d\n", s.i);
   printf_s("%d\n", SRef.i);
}
3
3
4
4

Confira também

Argumentos de função de tipo de referência
Retornos de função de tipo de referência
Referências a ponteiros