2012-05-30 2 views
1

Можно создать дубликат:
How are static variables with the same name in different functions identified by the System?же имя для статической переменной в статической функции члена

Как компилятор делает разницу между двумя локальными статическими переменными, которые имеют такое же имя, но определяются в двух разных (статических) функциях-членах?

class Type 
{ 
    public: 
     static void fun() 
     { 
      static bool sameName = false; 

      // work with sameName 

     } 
     static void moreFun() 
     { 
      static bool sameName = false; 

      // work with sameName 
     } 
}; 

ответ

4

Это намеревается охватить.

sameName существует в двух различных областях/в этом случае две функции прицелы

так внутренне переменные, возможно, будут ссылаться с именами fun.sameName и moreFun.sameName (имена только arbtitrary изобретенные мной, но показать принцип).

+0

Это то, что я думал. Невозможно получить доступ к этим переменным из-за пределов функций, даже если они существуют на протяжении всей программы? – tmaric

+0

@ tomislav-maric Если функция возвращает указатель или ссылку на них, вы можете получить к ним доступ за пределами функции, используя этот указатель/ссылку. В противном случае, нет способа добраться до них (ну, возможно, это возможно, если вы запустили его в отладчике, чтобы проверить их, что будет зависеть от отладчика). –

+0

@Edward: спасибо! – tmaric

1

В ++ SPEC C (например: N3337) говорят:

3 Ключевое слово статического может быть использован, чтобы объявить локальную переменную со статическим duraion хранения.

(Страница: 62; раздел 3.7.1 Статический срок хранения)

В вашем случае, переменная static bool sameName это относится к области действия функции fun. А другая переменная static bool sameName относится к сфере действия функции moreFun. Эти две статические переменные относятся к разным объемам. Эффект ключевого слова static только для продолжительности, это не эффект масштаба.

Смежные вопросы