2017-09-27 55 views
6

Standard C++ określa, że ​​muteks, atomics lub conditinal_variable są typu standardowego typu.Jaki jest cel gwarancji standardowego układu dla typów "czarnej skrzynki"?

Jakie są zalety tej specyfikacji? Jak użytkownik może korzystać z tej właściwości?

Co generalnie mogę zyskać, jeśli znany jest standardowy układ, nie znając szczegółów jego implementacji?

+0

Standardowy typ układu może być łatwiej wykorzystany przez inne języki. – Bathsheba

+0

@Bathsheba Nawet jeśli innym językiem jest również C++? ;) – curiousguy

Odpowiedz

1

Możesz połączyć swój kod z innymi programami, napisanymi w różnych językach programowania niż twój.

ref wspomina C++ concepts: StandardLayoutType:

Standardowe typy układu są przydatne do komunikowania się z kodu napisanego w innych językach programowania.

+0

Możesz użyć 'std :: offsetof' \ o/ – YSC

+0

Masz na myśli to @YSC [pytanie] (https://stackoverflow.com/questions/20170578/offsetof-on-standard-layout-class)? – gsamaras

+0

Wygląda na to, że nie wiem, czy istnieje dopełnienie między elementami klasy standardowego układu. Czy kompilator może dodawać dopełnienie między elementami, nawet jeśli wyrównanie nie wymagałoby tego? – Oliv

2

Od this standard layout reference:

Standardowe typy układu są przydatne do komunikowania się z kodu napisanego w innych językach programowania.

Na przykład, jeśli budujemy mieszany C oraz C++ aplikacja, struktury C będzie standardowy układ i mogą być używane zamiennie pomiędzy częściami napisanych w C i części napisanych w C++. Jest to często bardzo ważne, aby móc korzystać z natywnych funkcji i struktur systemu operacyjnego.

+0

Dobra odpowiedź, cieszymy się, że się zgadzamy! =) – gsamaras

+0

Szczerze mówiąc, nie rozumiem, jak mogłoby mi pomóc, jeśli dasz mi przykład? – Oliv

+0

@Oliv Istnieje wiele bibliotek napisanych dla C. Co jeśli chcesz użyć jednej z tych bibliotek w swojej aplikacji C++? Co to jest, że biblioteka C ma strukturę? Ponieważ struktura ta będzie * standardowym układem *, możesz utworzyć jej instancję w swoim programie C++ i przekazać do niej wskaźniki (lub nawet kopie instancji) do funkcji biblioteki C. –