Пространства имён
Варианты
Действия

Storage duration specifiers

Материал из cppreference.com
< cpp‎ | language

 
 
Язык С++
Общие темы
Управление программой
Операторы условного выполнения
Операторы повторения
Операторы перехода
Функции
объявление функции
объявление лямбда-функции
шаблон функции
спецификатор inline
спецификаторы исключений (устарело)
спецификатор noexcept (C++11)
Исключения
Пространства имён
объявление пространства имён
псевдонимы пространства имён
Типы
спецификатор decltype (C++11)
Спецификаторы
cv-спецификаторы
спецификаторы продолжительности хранения
спецификатор constexpr (C++11)
спецификатор auto (C++11)
спецификатор alignas (C++11)
Инициализация
Литералы
Выражения
Утилиты
Типы
typedef-объявление
объявление псевдонима типа (C++11)
атрибуты (C++11)
Приведения типов
неявные преобразования
const_cast-преобразование
static_cast-преобразование
dynamic_cast-преобразование
reinterpret_cast-преобразование
C-подобное и функциональное приведение типов
Выделение памяти
Классы
Особые свойства классовых функций
Специальные функции-члены
Шаблоны
шаблон класса
шаблон функции
специализация шаблона
упакованные параметры (C++11)
Разное
Ассемблерные вставки
 
  • auto - автоматическая длительность хранения. (устарело)
    Оригинал:
    auto - automatic storage duration. (устарело)
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • register - автоматическая длительность хранения. Также подсказка компилятору, чтобы он разместил переменную в регистре процессора. (устарело)
    Оригинал:
    register - automatic storage duration. Also hints to the compiler to place the variable in the processor's register. (устарело)
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • static - статическая длительность хранения и внутреннее связывание.
    Оригинал:
    static - static storage duration and internal linkage
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • extern - статическая длительность хранения и внешнее связывание.
    Оригинал:
    extern - static storage duration and external linkage
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • thread_local - потоковая длительность хранения. (начиная с C++11)
    Оригинал:
    thread_local - thread storage duration. (начиная с C++11)
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Содержание

[править] Объяснение

[править] Длительность хранения

Все переменные в программе имеют одну из следующих длительностей хранения:
Оригинал:
All variables in a program have one of the following storage durations:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Автоматическая длительность хранения. Память для переменной выделяется в начале работы окружающего её блока кода и освобождается в конце работы окружающего её блока кода. Эту длительность хранения имеют все не глобальные переменные, за исключением тех, которые объявлены как static, extern или thread_local.
    Оригинал:
    automatic storage duration. The variable is allocated at the beginning of the enclosing code block and deallocated on end. All non-global variables have this storage duration, except those declared static, extern or thread_local.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Статическая длительность хранения. Память для переменной выделяется в начале работы программы программы и освобождается в конце работы программы. Существует только один экземпляр переменной. Эту длительность хранения имеют все глобальные переменные, а также переменные, которые объявлены с static или extern.
    Оригинал:
    static storage duration. The variable is allocated when the program begins and deallocated when the program ends. Only one instance of the variable exists. All global variables have this storage duration, plus those declared with static or extern.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Потоковая длительность хранения (начиная с C++11). Память для переменной выделяется в начале работы потока и освобождается в конце работы потока. Каждый поток имеет свой собственный экземпляр переменной. Эту длительность хранения имеют только переменные, объявленные с thread_local. thread_local может быть объявлена только для глобальных переменных, а также тех, которые объявлены с static или extern.
    Оригинал:
    thread storage duration (начиная с C++11). The variable is allocated when the thread begins and deallocated when the thread ends. Each thread has its own instance of the variable. Only variables declared thread_local have this storage duration. thread_local can only be declared for global variables, plus those declared with static or extern.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Связывание

Связывание является способностью переменной или функции быть использованной в других областях видимости. Если в нескольких областях видимости произведено объявление переменной или функции с одинаковым идентификатором, и эта переменная или функция не может быть использована во всех этих областях видимости, то создается несколько экземпляров переменной или функции. Определены следующие типы связывания:
Оригинал:
Linkage refers to the ability of a variable or function to be referred to in other scopes. If a variable or function with the same identifier is declared in several scopes, but cannot be referred to from all of them, then several instances of the variable are generated. The following linkages are recognized:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Локальное связывание. Переменная может быть использована только в области видимости, в которой она создана. Это связывание присуще всем переменным с автоматической, потоковой и динамической длительностями хранения.
    Оригинал:
    no linkage. The variable can be referred to only from the scope it is in. All variables with automatic, thread and dynamic storage durations have this linkage.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Внутреннее связывание. Переменная может быть использована во всех областях видимости текущей транслируемой единицы (один файл исходного кода, плюс все заголовочные файлы явно или неявно включенные в него). Это связывание присуще всем переменным со статической длительностью хранения, которые объявлены с static, или const, но не extern.
    Оригинал:
    internal linkage. The variable can be referred to from all scopes in the current translation unit. All variables with static storage duration which are either declared static, or const but not extern, have this linkage.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Внешнее связывание. Переменная может использована во всех областях видимости в других транслируемых единицах (одна транслируемая единица - один файл исходного кода, плюс все заголовочные файлы явно или неявно включенные в него). Это связывание присуще всем переменным со статической длительностью хранения, за исключением тех, которые объявлены с static, или const, но не extern.
    Оригинал:
    external linkage. The variable can be referred to from the scopes in the other translation units. All variables with static storage duration have this linkage, except those declared static, or const but not extern.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Ключевые слова

auto, register, static, extern, thread_local

[править] Пример