O que significa &?

O que significa & quando colocado no final de uma palavra em C++?

Dê um exemplo por favor.

Quando colocado antes de uma varável na chamada de um método, significa uma parâmetros por referência, por exemplo.

& é um operador que possui três finalidades:
Quando utilizado em duplicidade em uma expressão lógica, refere-se ao operador lógico AND: if(x > 6 && 3 <= w)
Quando utilizado sozinho, numa expressão lõgica, valida os bits: if(x & y)
Quando posicionado antes de uma variável, está associado ao uso de ponteiros e, neste caso, está dizendo ao interpretador (compilador) que deseja-se referenciar a posição de memória e não o conteúdo a ser colocado nela: p1 = &c1;
Vide

2 curtidas

Complementando tua resposta:

Quando utilizado entre duas variáveis numéricas (incluindo o tipo bool, que nada mais é do que 1 ou 0), o operador & refere-se ao operador lógico AND, e avalia TODOS os operandos. Quando utilizado de forma duplicada, entre dois tipos numéricos, é chamado de SHORT-CIRCUIT AND. O mesmo acontece com o operador |, que pode ser utilizado sozinho ou na sua forma short-circuit.

A forma short-circuit é um pouco diferente da forma normal. Ela não necessariamente avalia todos os operandos da expresão. No caso do AND, caso o primeiro operando seja false (ou 0), o segundo não é avaliado, a operação para de ser executada e retorna false naquele mesmo instante, uma forma de curto circuito. No caso do OR, se o primeiro operando for true, acontece a mesma coisa.

Exemplos:

#include <iostream>
using namespace std;
bool recursaoInfinita() {
    return recursaoInfinita();
}

int main(int argc, char** argv) {
    cout << (false && recursaoInfinita()) << endl; // imprime 0
    cout << (true || recursaoInfinita()) << endl; // imprime 1
    cout << (false & recursaoInfinita()) << endl; // segmentation fault, chama recursaoInfinita
    return 0;
}

E ainda existe outra situação no C++, em que o & significa uma referência, e não o endereço de memória da variável. Dessa forma, não se lida diretamente com ponteiros.

#include <iostream>
using namespace std;

void foo(int& x) {
    x = 2;
}

int main(int argc, char** argv) {
    int x = 3;
    foo(x);
    cout << x << endl; // imprime 2
}
3 curtidas