Jaka jest różnica między static
globalnej i nie- static
globalnego identyfikatora w C++?Jaka jest różnica między statycznym globalnym i niestatycznym identyfikatorem globalnym w C++?
Odpowiedz
Statyczna ogranicza zakres zmiennej do tego samego translation unit.
statyczna zmienna globalna ma wewnętrzne powiązania.
niestatyczny globalny zmienna ma zewnętrzne powiązania.
dobre Przeczytaj:
What is external linkage and internal linkage?
Jeśli niestatyczny globalny ma zewnętrzne powiązanie, jaki jest pożytek z 'extern'? – rubenvb
@rubenvb: Odpowiedź na pytanie Q została szczegółowo wyjaśniona w linku w linii do odpowiedzi. –
@rubenvb 'extern' oznacza, że jest to deklaracja, a nie definicja, jak prototyp funkcji. –
Globalna static
zmienna jest dostępna tylko w jednostce tłumaczeń (czyli pliku źródłowego) zmienna jest w zmiennej non-static globalne można odwoływać się od innych. pliki źródłowe.
Dokładniej: użycie 'static' zapobiega linkowaniu eksportera symbolu z tej jednostki tłumaczeniowej. – cdhowie
Globalny Non zmienne statyczne są accessable z innymi plikami, natomiast statyczne zmienne globalne nie
są, jeśli nie wiem, jaka jest różnica, poprawna odpowiedź będzie prawdopodobnie jeszcze bardziej mylące dla Ciebie. W skrócie, static
s klasy nie są statyczne w zakresie plików. Statyka klasy jest zasadniczo identyczna ze zwykłymi zmiennymi, ale trzeba będzie się do nich odwołać, dodając przedrostek ich nazwą klasy. Statyka w zakresie pliku to zwykłe zmienne, które są lokalne tylko dla pliku. Aby zrozumieć, co to oznacza, spróbuj dodać dwie zmienne o tej samej nazwie do jednego projektu. Otrzymasz błędy linkera, ponieważ istnieje wiele identycznych symboli. Tworząc symbole statyczne, unikniesz problemów, a nazwa zmiennej nie będzie dostępna spoza pliku.
"Statyczny globalny" - co przez to rozumiesz? – Andrzej
@Andrzej jest globalne ze słowem kluczowym 'static' poprzedzającym typ. 'static int x = 5;' na przykład w zasięgu globalnym. –