Информация об изменениях

Сообщение Получение адреса объекта по адресу члена этого объекта от 10.12.2022 17:20

Изменено 10.12.2022 17:22 maks1180

Получение адреса объекта по адресу члена этого объекта
Мне нужно получить адреса объекта по адресу члена этого объекта. Планирую это делать через offsetof.
1) Есть ли другие способы ?
2) Я не совсем понял в описании кажется, что с ним будут проблемы в C23 ? Насколько надёжно и правильное это решение ?
3) gcc генерирует warning если в классе есть виртуальные функции. Но код генерирует правильный с учётом указателя на v-table. В чём тут дело ?

in Linux
warning: invalid access to non-static data member ‘MyClass::a’ of NULL object

in Windows
warning: 'offsetof' within non-standard-layout type 'MyClass' is conditionally-supported [-Winvalid-offsetof]


printf("%u \n", offsetof(MyClass, a));

class MyClass {
public:
virtual void Test1() {};
UPTR a;
int b;
int c;
};
Получение адреса объекта по адресу члена этого объекта
Мне нужно получить адреса объекта по адресу члена этого объекта. Планирую это делать через offsetof.
1) Есть ли другие способы ?
2) Я не совсем понял в описании кажется, что с ним будут проблемы в C23 ? Насколько надёжно и правильное это решение ?
3) gcc генерирует warning если в классе есть виртуальные функции. Но код генерирует правильный с учётом указателя на v-table. В чём тут дело ?

// gcc v4.8 Linux
warning: invalid access to non-static data member ‘MyClass::a’ of NULL object

// gcc v10.2 Windows
warning: 'offsetof' within non-standard-layout type 'MyClass' is conditionally-supported [-Winvalid-offsetof]


printf("%u \n", offsetof(MyClass, a));

class MyClass {
public:
virtual void Test1() {};
UPTR a;
int b;
int c;
};