И это всё МОЁ

Добрый день.
Нормально ли считается использовать обычные указатели на члены-переменные структур/классов, например так:


#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