Почему std::is_standard_layout_v> true?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему std::is_standard_layout_v> true?

Сообщение Anonymous »

Я пытался проверить, являются ли некоторые типы POD (на самом деле, чтобы посмотреть, смогу ли я поместить их в массив numpy), и, обнаружив, что std::is_pod устарел в C++20, решил попробовать альтернативу. Самым близким мне показался std::is_standard_layout, поэтому я попробовал его, но был очень удивлен, обнаружив, что std::is_standard_layout_v верен!
Затем я проверил еще несколько вещей, чтобы попытаться улучшить свое понимание:

Код: Выделить всё

struct Test {
double d;
};

struct Test2 : Test {
int i;
};

struct Test3 : Test {
int i;
Test3(unsigned u) {}
};
Я обобщил свои выводы ниже (Godbolt здесь):




std::is_trivy
std::is_pod
std::is_standard_layout



правда
верно
верно

Код: Выделить всё

struct Test
правда
верно
верно

Код: Выделить всё

struct Test2
истина
ложь
ложь

Код: Выделить всё

struct Test3
false
false
false

Код: Выделить всё

std::array
правда
верно
верно

Код: Выделить всё

std::vector
false
false
true

Код: Выделить всё

std::map
false
false
false



Может кто-нибудь объяснить, почему std::vector считается «стандартным макетом» и что мне следует использовать, чтобы проверить, является ли тип POD в С++20?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ouble-true
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»