W C ++ 20 koncepcja POD jest przestarzała, prawdopodobnie dlatego, że jest to bezsensowna złożona cecha bycia trywialnym i standardowym układem.
Błędny. Termin POD jest przestarzały, ponieważ nie ma już znaczenia :
Termin POD nie służy już celowi w normie, jest jedynie zdefiniowany, a ograniczenia obowiązują, gdy kilka innych typów zachowuje tę szczątkową właściwość.
Zasadniczo typ, który jest zarówno trywialny, jak i standardowy układ, nie zyskuje żadnych zdolności poza tym, co same w sobie są trywialne i standardowe. Połączenie dwóch nie czyni tego typu specjalnym, a te dwie właściwości tak naprawdę nie mają ze sobą wiele wspólnego.
Standardowy układ polega na tym, że układ niepustych podobiektów jest dobrze zdefiniowany (podobnie jak puste podobiekty klasy podstawowej nie zakłócają układu typu). Trywialność polega na tym, czy obiekt ma jakieś znaczenie poza blokiem bitów, które przechowuje (i czy jest koncepcyjnie poprawnym obiektem, jeśli jest inicjalizowany dowolnym blokiem bitów).
Jeśli tworzę szablon, który przyjmuje typ T
i chcę sprawdzić, czy mogę memcpy
tego typu obiekty, nie dbam o układ jego elementów; Chcę wiedzieć, czy można to zrobić TrivialCopyable. Podobnie poprawność offsetof
nie ma najmniejszego znaczenia, jeśli klasa ma podany przez użytkownika konstruktor kopii. Chodzi tylko o to, czy układ podobiektów elementów odbywa się w przejrzystej, wymuszonej standardem kolejności.
Zasadniczo ludzie rozejrzeli się i zdali sobie sprawę, że w C ++ nie zostało nic, co wymagałoby przecięcia trywialności i standardowego układu. Nie musimy więc rezerwować terminu. Tych kilka miejsc, w których norma wyraźnie stwierdza, że pewnym typem będzie „POD”, można po prostu zastąpić odpowiednio „trywialnym i standardowym układem”.
Czy to wymaganie rekurencyjne jest zbędne?
Ponieważ oba wymagania składowe są indywidualnie rekurencyjne, przecięcie tych dwóch również jest rekurencyjne. Nie ma więc wyraźnej potrzeby stwierdzania, że wszystkie podobiekty są również POD. Był to więcej niż prawdopodobnie przypadek dziwności polegającej na kopiowaniu i wklejaniu, w której oryginalna definicja mówiła coś w stylu „wszyscy niestatyczni członkowie danych muszą być typami POD” i po prostu zachowali tę instrukcję w niezmienionej postaci.
Standardowy układ zależy od standardowego układu elementów niestatycznych:
Trywialność zależy również od trywialności członków niestatycznych. Dla zwięzłości podałem tylko regułę dla domyślnego konstruktora, ale inne specjalne funkcje składowe mają podobne sformułowanie:
O ile mogę powiedzieć, wyraźny wymóg PODness dotyczący zastosowania do członków jest zbędny, ponieważ domyślnie wynika również z wymagań dotyczących standardowego układu i trywialności.
źródło