Перейти к содержимому
На этой странице

Модификаторы переменных

Все темы C++ Developer

Как static влияет на глобальные/локальные переменные?

Ключевое слово static в C++ имеет различные эффекты в зависимости от контекста его использования, особенно когда речь идет о глобальных и локальных переменных:

  1. Глобальные переменные:

    • Когда static используется с глобальной переменной, это означает, что переменная будет иметь локальную область видимости файла. Это значит, что доступ к такой переменной возможен только в пределах файла, в котором она объявлена, даже если другие файлы являются частью того же проекта. Это помогает избежать конфликтов имен в больших проектах.
  2. Локальные переменные:

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

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


Как сonst влияет на переменную?

Ключевое слово const в C++ указывает, что переменная не может быть изменена после своей инициализации. Вот основные эффекты использования const с переменными:

  1. Иммутабельность: Переменная, объявленная как const, становится неизменяемой, что означает, что её значение не может быть изменено после инициализации.

  2. Защита: const помогает защитить данные от случайных изменений, что особенно полезно при передаче больших структур или классов в функции. Если аргумент функции объявлен как const, функция не сможет изменить переданный объект.

  3. Улучшение производительности: Компилятор может оптимизировать программу, зная, что некоторые значения остаются постоянными на протяжении всего выполнения.

  4. Использование с указателями: const может быть использовано с указателями в различных контекстах:

    • const int* ptr: указатель на константное целое, значение по указателю не может быть изменено.

    • int* const ptr: константный указатель на целое, сам указатель не может быть изменен, но значение по адресу может быть изменено.

    • const int* const ptr: константный указатель на константное целое, ни указатель, ни значение по нему изменить нельзя.

  5. Интерфейсы и контракты: Использование const позволяет ясно указать намерения использования данных в функциях и методах, улучшая читаемость и поддерживаемость кода.

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


Какие варианты использования extern вы знаете?

Ключевое слово extern в C++ используется для указания на то, что определение переменной или функции находится в другом месте, обычно в другом файле исходного кода. Вот несколько основных способов использования extern:

  1. Объявление глобальных переменных: Использование extern позволяет объявить глобальную переменную в одном файле, а определить её в другом. Это полезно для доступа к одной переменной из разных файлов без повторного определения или дублирования.

    // В файле header.h
    extern int globalVar;
    
    // В файле source.cpp
    int globalVar = 42;
  2. Ссылки на функции: extern может быть использовано для объявления функции, которая определена в другом файле. Это обеспечивает доступ к функции из различных частей программы без необходимости включения всего кода функции в каждый файл.

    // В файле funcs.h
    extern void printMessage();
    
    // В файле funcs.cpp
    void printMessage() {
        std::cout << "Hello, world!" << std::endl;
    }
  3. Связь с C-библиотеками: Когда C++ используется совместно с C, extern "C" используется для указания компилятору C++, что определенные функции должны быть обработаны как функции C, что предотвращает изменение их имён во время компиляции (name mangling), и обеспечивает их совместимость с библиотеками на C.

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

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

Собеседования: C++

Смотри записи интервью, узнай, какие вопросы задают и как отвечают кандидаты.

Вопросы и ответы

Не нашли ответ? Напишите мне в чат. Я делаю Шпаргалку и сам отвечаю на сообщения. Расскажите, что не работает или чего вам не хватает. Может, смогу сразу взять это в работу.

Откуда взяты вопросы?

Из реальных собеседований. Основой подборки стал опыт Вадима Новосёлова: он проходил интервью и записывал вопросы. Подробнее о материалах.

Насколько эти вопросы актуальны?

Эти вопросы встречались нам на реальных собеседованиях в 2025 году. Мы регулярно проходим собеседования и пополняем подборку новыми вопросами. Основы профессии и ключевые технологии остаются востребованными годами, а детали конкретных инструментов и версий стоит сверять с текущей документацией.

На какой уровень рассчитана подборка?

Мы проходили собеседования на вакансии уровня Middle+, а иногда и на Senior-позиции. Вопросы из этих интервью вошли в подборку. Направления работы: C++-разработчик, Разработчик системного ПО. Глубина обсуждения зависит от вакансии: будь готов объяснить основную идею, привести практический пример и разобрать ограничения и альтернативы решения.

Этот вопрос точно будет на моём собеседовании?

Гарантии нет: набор вопросов зависит от компании, задач команды, уровня вакансии и самого интервьюера. Эти вопросы уже встречались на реальных собеседованиях, но на твоём интервью ту же тему могут проверить другой формулировкой, практической задачей или обсуждением твоего опыта. Используй подборку, чтобы разобраться в теме: объясняй идею своими словами, приводи примеры и готовься обсудить ограничения и альтернативы решения. Так будет проще ответить и на знакомый вопрос, и на неожиданные уточнения.