2011-12-18 3 views
6

Mam wymóg, w którym zmienna (const) powinna być dostępna dla całego cpp, który składa się z kilku klas. Zdecydowałem się użyć przestrzeni nazw, aby rozwiązać problem, ale nie jestem pewien co do tego:Przestrzeń nazw C++ i zmienne statyczne

  • Czy muszę zdefiniować tę zmienną jako statyczną?
  • Czy to prawda, że ​​mogę uniknąć sytuacji, w której zmienna statyczna może wystąpić tylko wtedy, gdy odwiedzę ją z bezimienną przestrzenią nazw?
+0

Czy próbowałeś wypisać go na wierzchu, poza zajęciami/funkcjami? (bez statycznego ofc). – neeKo

+2

Czy istnieje powód, dla którego nie chcesz, aby był statyczny? – tpg2114

+1

Jeśli jest to "const", to jest również niejawnie statyczne. Musisz użyć 'extern const', aby uczynić ją niestatyczną. –

Odpowiedz

6
  1. Nie trzeba zdefiniować zmienną jako statyczne, albo w anonimowej przestrzeni nazw. Jeśli jednak nie używasz tego obiektu poza plikiem, w którym został zdefiniowany, dobrym pomysłem jest zmniejszenie zanieczyszczenia przestrzeni nazw i przyspieszenie łączy (poprzez zmniejszenie liczby symboli, które muszą zostać uwzględnione przez linker).
  2. Jeśli zadeklarujesz zmienną w anonimowym obszarze nazw, będzie ona skutecznie statyczna. Nie ma potrzeby, aby tak naprawdę było statyczne (chociaż możesz, jeśli chcesz). Zaletą anonimowych przestrzeni nazw jest również możliwość definiowania typów (klas, struktur, wyliczeń, typów), jak również zmiennych statycznych i funkcji.
+0

Dzięki, to było bardzo jasne. –