Последнее обновление:2026-10-12
C++ оператор разыменования *¶
0.Введение¶
Обычно при работе с указателями мы используем *, например:
Но есть ли у него ещё какие-то применения?
Ответ — да: в C++ есть ещё три:
::*.*->*
Знаете ли вы, что означает каждое из них?
1.::*¶
::* называется Pointer to member declarator — указатель-декларатор на член.
Приведём пример:
Как в приведённом ниже примере получить адрес w_?
Если написать double * d = &w_; это будет неверно, потому что неизвестно, где находится w_; поэтому нужен указатель-декларатор на член — с его помощью можно выполнить привязку, а имея такой указатель, можно обращаться к членам. Теперь перейдём к следующим двум.
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..*¶
.* называется pointer to member of object — это легко понять: это указатель для доступа к членам объекта. Указатель на член позволяет ссылаться на нестатические члены объекта класса. Указатель на член нельзя использовать для статических членов класса, поскольку адрес статического члена не связан ни с каким конкретным объектом.
Поэтому в примере выше эта строка кода изменяет значение члена w на 2.2.
3.->*¶
->* называется pointer to member of pointer — это понять ещё проще: он аналогичен ., только работает с адресом члена **объекта-указателя*.
Поэтому соответствующий пример принимает вид:
Более подробную информацию читайте на cppreference.com.
https://en.cppreference.com/w/cpp/language/pointer#Pointers_to_members
Ну как, разобрались? На этом раздел окончен~
Похожие темы¶
- C++ чисто виртуальные функции и абстрактные классы | C++那些事
- C++ утверждения assert | C++那些事
- C++ битовые поля | C++那些事
- Реализация полиморфизма C++ на языке C | C++那些事
- C++ константы const и его модификация | C++那些事
- C++ всё семейство const | C++那些事
- C++ инициализация и присваивание | C++那些事
- C++ возврат нескольких значений | C++那些事
- C++ ключевое слово mutable | C++那些事
- C++ restrict и оптимизации компилятора | C++那些事