Mam trudności ze zrozumieniem poniższego akapitu cytowanego z cpreferencji na temat trywialnego domyślnego konstruktora. Przeszukałem stackoverflow, ale nadal nie otrzymałem jasnej odpowiedzi. Więc proszę o pomoc.
Trywialny domyślny konstruktor to konstruktor, który nie wykonuje żadnej akcji. Wszystkie typy danych kompatybilne z językiem C (typy POD) są trywialnie domyślne. W przeciwieństwie do C nie można jednak tworzyć obiektów z trywialnymi domyślnymi konstruktorami, po prostu ponownie interpretując odpowiednio wyrównane miejsce do przechowywania, takie jak pamięć przydzielona ze std :: malloc: umieszczenie-nowe jest wymagane do formalnego wprowadzenia nowego obiektu i uniknięcia potencjalnie niezdefiniowanego zachowania.
W szczególności, jeśli trywialny domyślny konstruktor nic nie robi, dlaczego nie możemy ponownie zinterpretować pamięci i udawać, że istnieje obiekt o danym typie? Czy mógłbyś podać kilka przykładów potencjalnie niezdefiniowanego zachowania, które mogłoby to spowodować?
*reinterpret_cast<float*>(&someNonFloatObject) = 0.1f;
. C ++ ma pojęcie obiektów i czasów życia obiektów, określone na maszynie abstrakcyjnej, i tylko dlatego, że nie ma instrukcji procesora do utworzenia obiektu z pamięci, nie oznacza, że nie ma różnicy na maszynie abstrakcyjnej.