W języku C, tak, są one tym samym adresem. Prosty i prosty.
W języku C++ nie, nie są one tym samym adresem. Klasy podstawowe mogą (i podejrzewam, że robię) przychodzą przed wszystkimi członkami, a funkcje wirtualnych elementów zwykle dodają gdzieś ukryte dane do struktury. Jeszcze bardziej mylące, kompilator C++ może również dowolnie zmieniać układy członków, chyba że klasa jest standardowym typem układu (choć nie wiem, że robi to dowolny kompilator)
Wreszcie, jeśli struktura C++ składa się ze standardu typy układów:, nie zawiera klas bazowych ani funkcji wirtualnych, a wszyscy członkowie mają tę samą widoczność i być może inne ograniczenia, o których zapomniałem, , następnie powraca na zasadach C i wymaga, aby pierwszy członek był pod tym samym adresem, co sam obiekt.
§ 9,2/7
Klasa standardowego układu jest klasa:
- nie ma nie-statycznych pól grupy typu nie-standardowego układu (lub szeregu takich typów) lub odniesienie,
- nie ma funkcji wirtualnych (10.3) i żadnych wirtualnych klas bazowych (10.1),
- ma tę samą kontrolę dostępu (Rozdział 11) dla wszystkich niestatycznych elementów danych,
- nie ma żadnych niestandardowych klasa podstawowa układu,
- albo nie ma żadnych statycznych elementów danych w większości klas pochodnych i co najwyżej jednej klasy bazowej z niestatycznymi elementami danych lub bez klas podstawowych z niestatycznymi elementami danych i
- nie ma klas podstawowych tego samego typu, co pierwszy niestatyczny element danych .
§ 9.2/20
Wskaźnik do struct obiektu standardowego układu, odpowiednio przekształcone za pomocą reinterpret_cast wskazuje na początkowej elementu (lub gdy element jest bitowe pole, a następnie do jednostki, w której się ona znajduje) i wzajemnie. [Uwaga: Może istnieć nienazwane wypełnienie wewnątrz obiektu strukturalnego o standardowym układzie, ale nie na jego początku, jeśli jest to konieczne do uzyskania odpowiedniego wyrównania. -end note]
Nie są one takie same pod tym względem –
@MooingDuck: Cóż, to zależy od tego, czym jest '...'. Dla tej samej definicji struktury, C++ potraktuje ją w taki sam sposób, jak struktury C (C zawsze spełniają wymagania standardowego układu C++ *). –