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