Могут ли следующие константы сделать тип не POD-ом?

144
06 апреля 2022, 03:40

Рассмотрим следующий код:

struct POD
{
    static const uint32_t CONST_1;
    static constexpr uint32_t CONST_2;
    uint32_t Member_1;
    uint8_t Member_2;
};

Подскажите, пожалуйста, является ли данный тип POD-ом?

Я хочу использовать POD структуру для общения через границу DLL. Но мне также хотелось бы, чтобы в этой структуре находились кое-какие формальные константы, к которым было бы удобно обращаться из кода, например, так:

POD::CONST_1
POD::CONST_2

Не сломают ли таки константы представление структуры в памяти?

Answer 1

Статические поля не хранятся внутри экземпляров класса, так что ваша структура останется POD.

Static members of a class are not associated with the objects of the class: they are independent variables with static or thread (since C++11) storage duration or regular functions. Источник

В этом легко убедиться на примере:

#include <iostream>
using namespace std;
struct test
{
    static uint32_t testVar;
    uint32_t otherVar;
};
int main() 
{
    cout <<sizeof(test)<< endl;
    return 0;
}

Пример выдает четверку, а не восьмерку, как можно было бы ожидать.

READ ALSO
Чтение .png с помощью Lua

Чтение .png с помощью Lua

Доброе время сутокНеобходимо сделать скрипт на Lua который будет читать png файлы, записывая каждый пиксель в массив, затем по вызову передавать...

154
SFML C++ Ошибка при загрузке текустуры

SFML C++ Ошибка при загрузке текустуры

Есть отдельный класс Resources,в котором хранятся контейнеры:

263
Ошибки при компиляции qt

Ошибки при компиляции qt

Установил mingwВот версия компилятора: 6

91