Добрый день. Нормально ли считается использовать обычные указатели на члены-переменные структур/классов, например так:
#include <iostream>
using namespace std;
struct A {
int i;
};
void f(int *i) { cout << dec << *i << " " << hex << (long)i << endl; }
void f(int &i) { cout << dec << i << " " << hex << (long)&i << endl; }
void f(A *pa, int A::*am) {
cout << dec << pa->*am << " " << hex << (long)&(pa->*am) << endl;
}
void f(A *pa) { cout << dec << pa->i << " " << hex << (long)&(pa->i) << endl; }
void f(A &ra) { cout << dec << ra.i << " " << hex << (long)&(ra.i) << endl; }
int main() {
A a{55};
// Номально ли делать так
f(&a.i);
f(a.i);
// Или лучше так (чем лучше?)
f(&a, &A::i);
// Или может вообще лучше так
f(&a);
f(a);
return 0;
}
// Вывод:
// 55 7ffcb727e274
// 55 7ffcb727e274
// 55 7ffcb727e274
// 55 7ffcb727e274
// 55 7ffcb727e274