---
title: Модификаторы переменных
seo:
  title: Модификаторы переменных — C++ Developer
  description: Тема «Модификаторы переменных» для собеседования C++ Developer. Как static влияет на глобальные/локальные переменные? Как сonst влияет на переменную?
---

[Все темы C++ Developer](/c-developer)

## <strong>Как</strong> <code>static</code> <strong>влияет на глобальные/локальные переменные?</strong> [#q-14bee738d69b8155ac2ad4aaba70e5e4]

Ключевое слово <code>static</code> в C++ имеет различные эффекты в зависимости от контекста его использования, особенно когда речь идет о глобальных и локальных переменных&#58;

{/* prettier-ignore */}
1. <strong>Глобальные переменные</strong>&#58;

    - Когда <code>static</code> используется с глобальной переменной, это означает, что переменная будет иметь локальную область видимости файла. Это значит, что доступ к такой переменной возможен только в пределах файла, в котором она объявлена, даже если другие файлы являются частью того же проекта. Это помогает избежать конфликтов имен в больших проектах.

1. <strong>Локальные переменные</strong>&#58;

    - Для локальных переменных, объявленных с <code>static</code> в функции или блоке, переменная сохраняет свое значение между вызовами функции. То есть, переменная инициализируется только один раз, а её последнее значение сохраняется для использования при следующем вызове функции. Это полезно для сохранения состояния между вызовами функций без использования глобальных переменных.

В обоих случаях объект имеет статическую длительность хранения. Локальный static с динамической инициализацией инициализируется при первом прохождении объявления, а не обязательно до main. Начиная с C++11 эта инициализация защищена от одновременного выполнения, но последующие изменения объекта автоматически потокобезопасными не становятся.

:::note[Ссылки для изучения]

1. [Статические члены класса](https://metanit.com/cpp/tutorial/5.7.php)
   :::

---

## <strong>Как</strong> <code>сonst</code> <strong>влияет на переменную?</strong> [#q-14bee738d69b81d18d70e377efa4fc73]

Ключевое слово <code>const</code> в C++ указывает, что переменная не может быть изменена после своей инициализации. Вот основные эффекты использования <code>const</code> с переменными&#58;

{/* prettier-ignore */}
1. <strong>Иммутабельность</strong>&#58; Переменная, объявленная как <code>const</code>, становится неизменяемой, что означает, что её значение не может быть изменено после инициализации.

1. <strong>Защита</strong>&#58; <code>const</code> помогает защитить данные от случайных изменений, что особенно полезно при передаче больших структур или классов в функции. Если аргумент функции объявлен как <code>const</code>, функция не сможет изменить переданный объект.

1. <strong>Улучшение производительности</strong>&#58; Компилятор может оптимизировать программу, зная, что некоторые значения остаются постоянными на протяжении всего выполнения.

1. <strong>Использование с указателями</strong>&#58; <code>const</code> может быть использовано с указателями в различных контекстах&#58;

    - <code>const int&#42; ptr</code>&#58; указатель на константное целое, значение по указателю не может быть изменено.

    - <code>int&#42; const ptr</code>&#58; константный указатель на целое, сам указатель не может быть изменен, но значение по адресу может быть изменено.

    - <code>const int&#42; const ptr</code>&#58; константный указатель на константное целое, ни указатель, ни значение по нему изменить нельзя.

1. <strong>Интерфейсы и контракты</strong>&#58; Использование <code>const</code> позволяет ясно указать намерения использования данных в функциях и методах, улучшая читаемость и поддерживаемость кода.

<code>Const</code> эффективно используется для обеспечения безопасности и
предсказуемости поведения программ, защищая данные от несанкционированного
изменения.

:::note[Ссылки для изучения]

1. [Статические члены класса](https://metanit.com/cpp/tutorial/5.7.php)
   :::

---

## <strong>Какие варианты использования</strong> <code>extern</code> <strong>вы знаете?</strong> [#q-14bee738d69b81d6a7e2da2aedc26fa6]

Ключевое слово <code>extern</code> в C++ используется для указания на то, что определение переменной или функции находится в другом месте, обычно в другом файле исходного кода. Вот несколько основных способов использования <code>extern</code>&#58;

1. <strong>Объявление глобальных переменных</strong>&#58; Использование
   <code>extern</code> позволяет объявить глобальную переменную в одном файле, а
   определить её в другом. Это полезно для доступа к одной переменной из разных
   файлов без повторного определения или дублирования.

   ```cpp
   // В файле header.h
   extern int globalVar;

   // В файле source.cpp
   int globalVar = 42;
   ```

1. <strong>Ссылки на функции</strong>&#58; <code>extern</code> может быть
   использовано для объявления функции, которая определена в другом файле. Это
   обеспечивает доступ к функции из различных частей программы без необходимости
   включения всего кода функции в каждый файл.

   ```cpp
   // В файле funcs.h
   extern void printMessage();

   // В файле funcs.cpp
   void printMessage() {
       std::cout << "Hello, world!" << std::endl;
   }
   ```

1. <strong>Связь с C-библиотеками</strong>&#58; Когда C++ используется совместно
   с C, <code>extern &#34;C&#34;</code> используется для указания компилятору
   C++, что определенные функции должны быть обработаны как функции C, что
   предотвращает изменение их имён во время компиляции (name mangling), и
   обеспечивает их совместимость с библиотеками на C.

   ```cpp
   extern "C" {
       #include "legacy_c_library.h"
   }
   ```

<code>Extern</code> является важным инструментом для управления видимостью и
доступностью переменных и функций в больших проектах на C++, где код распределен
по множеству файлов.

:::note[Ссылки для изучения]

1. [Внешние объекты в C++](https://metanit.com/cpp/tutorial/3.9.php)
   :::
