Что обозначает конструкция &имя_структуры::член_структуры?

Допустим, имеется структура Plan. в ней есть поле char kod (не static). Что обозначает следующая запись:

&Plan::Kod

Хочу отметить, я не ошибся. & именно перед названием структуры, а не перед объектом типа Plan


Ответы (1 шт):

Автор решения: AlexGlebe

Возвращается тип, устроенный на усмотрение компилятора так, чтобы он идентифицировал любое поле класса без использования имён, которые придумал программист. Практически обычно содержит в себе смещение в байтах этого элемента и ещё служебную информацию.

class   Plan {
public  :    
    int i ;
    int j ;
} ;
# include <iostream>

int main ( ) {        
    auto sm = & Plan :: i ;
    Plan p ;
    p .* sm = 1 ; // p . i = 1 ;
    sm = & Plan :: j ;
    p .* sm = 2 ; // p . j = 2 ;
    std :: cout << "p = { .i = " << p . i <<
      ", .j = " << p . j << " }" << std::endl; 
}

p = { .i = 1, .j = 2 }

Обращение к полю конкретного объекта по это структуре реализуется с помощью оператора .* ;


Тип его без использования auto можно написать так :

int Plan :: * sm = & Plan :: i ;

В английских текстах это называется указателями, хотя в скобках уточняют, что это не указатели. И использовать можно только относительно фактического объекта.

→ Ссылка