std::is_pod
wird wahrscheinlich in C ++ 20 veraltet sein.
Was ist der Grund für diese Wahl? Was sollte ich verwenden, um std::is_pod
zu wissen, ob ein Typ tatsächlich ein POD ist?
c++
typetraits
Skypjack
quelle
quelle
static_assert
um sicherzustellen, dass niemand Strukturen berührt, die mit C-Code geteilt werden sollen.Antworten:
POD wird durch zwei Kategorien ersetzt, die mehr Nuancen ergeben. Das c ++ Standard Meeting im November 2017 hatte folgendes zu sagen:
Verwenden Sie für einfache Datentypen die
is_standard_layout
Funktion, für einfache Datentypen (z. B. einfache Strukturen) dieis_trivial
Funktion.quelle
remove_cvref
auf der einen Seite hinzu, das ist ein zusammengesetztes Merkmal, während sie auf der anderen Seite andere zusammengesetzte Merkmale entfernen? Es scheint verrückt zu sein. :-)std::is_pod<T>{} == (std::is_trivial<T>{} && std::is_standard_layout<T>{})
?std::is_pod
,std::is_trivia
undstd::is_standard_layout
Compile-Zeit? Denn in Algorithmen wünschen Sie sich möglicherweise einen schnelleren Algorithmus mit memcpy () usw., wenn das C-Layout kompatibel ist.