Última atualização:2026-10-12
O operador de desreferência * em C++¶
0. Introdução¶
Normalmente, ao trabalhar com ponteiros, usamos o *, por exemplo:
Além disso, quais outros usos existem?
A resposta é sim: em C++, por exemplo, há ainda os três tipos a seguir:
::*.*->*
Você sabe o que cada um deles significa?
1.::*¶
O ::* é chamado de Pointer to member declarator (declarador de ponteiro para membro).
Vamos a um exemplo:
No exemplo a seguir, como você obteria o endereço de w_?
Se você escrever double * d = &w_;, será inválido, porque não se sabe onde w_ está; por isso é necessário um ponteiro para o declarador de membro, que permite fazer a ligação. Com esse ponteiro, já é possível acessar o membro. Continuemos com os dois próximos.
class Rectangle {
public:
double w_, h_;
Rectangle(double w, double h) : w_(w), h_(h) {}
double area() { return w_ * h_; }
};
int main() {
Rectangle r{2.1, 3.2};
double Rectangle::* w = &Rectangle::w_;
r.*w = 2.2;
std::cout << r.w_ << std::endl;
};
2..*¶
O .* é chamado de pointer to member of object (ponteiro para membro de objeto); este é fácil de entender: é o ponteiro que acessa membros de um objeto. Um ponteiro para membro permite referenciar membros não estáticos de um objeto de classe. Não é possível usar um ponteiro para membro para apontar para membros estáticos da classe, porque o endereço de um membro estático não está associado a nenhum objeto específico.
Por isso, no exemplo acima, essa linha de código altera o valor do membro w para 2.2.
3.->*¶
O ->* é chamado de pointer to member of pointer (ponteiro para membro de ponteiro); este é ainda mais fácil de entender: é semelhante ao ., mas opera sobre o endereço de membros de um **objeto ponteiro*.
Assim, o exemplo correspondente passa a ser:
Para mais detalhes, consulte cppreference.com.
https://en.cppreference.com/w/cpp/language/pointer#Pointers_to_members
Ficou claro? Fim desta seção~
Tópicos relacionados¶
- Funções virtuais puras e classes abstratas em C++ | C++那些事
- Asserções com assert em C++ | C++那些事
- Bit fields em C++ | C++那些事
- Implementando polimorfismo de C++ em linguagem C | C++那些事
- Constantes e modificadores com const em C++ | C++那些事
- A família completa do const em C++ | C++那些事
- Inicialização e atribuição em C++ | C++那些事
- Formas de retornar múltiplos valores em C++ | C++那些事
- A palavra-chave mutable em C++ | C++那些事
- C++ restrict e otimização do compilador | C++那些事