SlideShare a Scribd company logo
Программирование на языке C++
Лекция 5
Ключевые слова static и inline
Александр Смаль
1/9
Глобальные переменные
Объявление глобальной переменной:
extern int global;
void f () {
++ global;
}
Определение глобальной переменной:
int global = 10;
Проблемы глобальных переменных:
∙ Масштабируемость.
∙ Побочные эффекты.
∙ Порядок инициализации.
2/9
Статические глобальные переменные
Статическая глобальная переменная — это глобальная
переменная, доступная только в пределах модуля.
Определение:
static int global = 10;
void f () {
++ global;
}
Проблемы статических глобальных переменных:
∙ Масштабируемость.
∙ Побочные эффекты.
3/9
Статические локальные переменные
Статическая локальная переменная — это глобальная
переменная, доступная только в пределах функции.
Время жизни такой переменной — от первого вызова функции
next до конца программы.
int next(int start = 0) {
static int k = start;
return k++;
}
Проблемы статических локальных переменных:
∙ Масштабируемость.
∙ Побочные эффекты.
4/9
Статические функции
Статическая функция, доступная только в пределах модуля.
Файл 1.cpp:
static void test () {
cout << "An";
}
Файл 2.cpp:
static void test () {
cout << "Bn";
}
Статические глобальные переменные и статические функции
проходят внутреннюю линковку.
5/9
Статические поля класса
Статические поля класса — это глобальные переменные,
определённые внутри класса.
Объявление:
struct User {
...
private:
static size_t instances_;
};
Определение:
size_t User :: instances_ = 0;
Для доступа к статическим полям не нужен объект.
6/9
Статические методы
Статические методы — это функции, определённые внутри
класса и имеющие доступ к закрытым полям и методам.
Объявление:
struct User {
...
static size_t count () { return instances_; }
private:
static size_t instances_;
};
Для вызова статических методов не нужен объект.
cout << User :: count ();
7/9
Ключевое слово inline
Советует компилятору встроить данную функцию.
inline double square(double x) { return x * x; }
∙ В месте вызова inline-функции должно быть известно её
определение.
∙ inline функции можно определять в заголовочных
файлах.
∙ Все методы, определённые внутри класса, являются
inline.
∙ При линковке из всех версий inline-функции (т.е. её код
из разных единиц трансляции) выбирается только одна.
∙ Все определения одной и той же inline-функции должны
быть идентичными.
∙ inline — это совет компилятору, а не указ. 8/9
Правило одного определения
Правило одного определения
(One Definition Rule, ODR)
∙ В пределах любой единицы трансляции сущности не могут
иметь более одного определения.
∙ В пределах программы глобальные переменные и
не-inline функции не могут иметь больше одного
определения.
∙ Классы и inline функции могут определяться в более чем
одной единице трансляции, но определения обязаны
совпадать.
Вопрос: к каким проблемам могут привести разные
определения одного класса в разных частях программы?
9/9

More Related Content

What's hot

4.4 Таблица виртуальных методов
4.4 Таблица виртуальных методов4.4 Таблица виртуальных методов
4.4 Таблица виртуальных методов
DEVTYPE
 
2.8 Строки и ввод-вывод
2.8 Строки и ввод-вывод2.8 Строки и ввод-вывод
2.8 Строки и ввод-вывод
DEVTYPE
 
8 3-5
8 3-58 3-5
Огранизация ввода и вывода данных
Огранизация ввода и вывода данныхОгранизация ввода и вывода данных
Огранизация ввода и вывода данных
Andrey Dolinin
 
8 3-4
8 3-48 3-4
Cpp/cli types
Cpp/cli typesCpp/cli types
Cpp/cli typesmcroitor
 
8 3-3
8 3-38 3-3
4.3 Виртуальные методы
4.3 Виртуальные методы4.3 Виртуальные методы
4.3 Виртуальные методы
DEVTYPE
 
Программирование циклических алгоритмов
Программирование циклических алгоритмовПрограммирование циклических алгоритмов
Программирование циклических алгоритмов
Andrey Dolinin
 
презентация Microsoft power point
презентация Microsoft power pointпрезентация Microsoft power point
презентация Microsoft power pointP_Arthur
 
Prezentatsia
Prezentatsia Prezentatsia
Prezentatsia weidar
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
corehard_by
 
3.7 Конструктор копирования и оператор присваивания
3.7 Конструктор копирования и оператор присваивания3.7 Конструктор копирования и оператор присваивания
3.7 Конструктор копирования и оператор присваивания
DEVTYPE
 
Matlab: Вычисление производной
Matlab: Вычисление производнойMatlab: Вычисление производной
Matlab: Вычисление производной
Dmitry Bulgakov
 
6.3 Специализация шаблонов
6.3 Специализация шаблонов6.3 Специализация шаблонов
6.3 Специализация шаблонов
DEVTYPE
 
лабораторная работа №5
лабораторная работа №5лабораторная работа №5
лабораторная работа №5Zhanna Kazakova
 
3.8 Класс массива
3.8 Класс массива3.8 Класс массива
3.8 Класс массива
DEVTYPE
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++
mcroitor
 

What's hot (20)

4.4 Таблица виртуальных методов
4.4 Таблица виртуальных методов4.4 Таблица виртуальных методов
4.4 Таблица виртуальных методов
 
2.8 Строки и ввод-вывод
2.8 Строки и ввод-вывод2.8 Строки и ввод-вывод
2.8 Строки и ввод-вывод
 
8 3-5
8 3-58 3-5
8 3-5
 
Огранизация ввода и вывода данных
Огранизация ввода и вывода данныхОгранизация ввода и вывода данных
Огранизация ввода и вывода данных
 
8 3-4
8 3-48 3-4
8 3-4
 
Cpp/cli types
Cpp/cli typesCpp/cli types
Cpp/cli types
 
8 3-3
8 3-38 3-3
8 3-3
 
4.3 Виртуальные методы
4.3 Виртуальные методы4.3 Виртуальные методы
4.3 Виртуальные методы
 
Программирование циклических алгоритмов
Программирование циклических алгоритмовПрограммирование циклических алгоритмов
Программирование циклических алгоритмов
 
лекция 1
лекция 1лекция 1
лекция 1
 
лекция 3
лекция 3лекция 3
лекция 3
 
презентация Microsoft power point
презентация Microsoft power pointпрезентация Microsoft power point
презентация Microsoft power point
 
Prezentatsia
Prezentatsia Prezentatsia
Prezentatsia
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
 
3.7 Конструктор копирования и оператор присваивания
3.7 Конструктор копирования и оператор присваивания3.7 Конструктор копирования и оператор присваивания
3.7 Конструктор копирования и оператор присваивания
 
Matlab: Вычисление производной
Matlab: Вычисление производнойMatlab: Вычисление производной
Matlab: Вычисление производной
 
6.3 Специализация шаблонов
6.3 Специализация шаблонов6.3 Специализация шаблонов
6.3 Специализация шаблонов
 
лабораторная работа №5
лабораторная работа №5лабораторная работа №5
лабораторная работа №5
 
3.8 Класс массива
3.8 Класс массива3.8 Класс массива
3.8 Класс массива
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++
 

Viewers also liked

6.1 Шаблоны классов
6.1 Шаблоны классов6.1 Шаблоны классов
6.1 Шаблоны классов
DEVTYPE
 
Программирование: теоремы и задачи
Программирование: теоремы и задачиПрограммирование: теоремы и задачи
Программирование: теоремы и задачи
DEVTYPE
 
3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в Java3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в Java
DEVTYPE
 
4.5 Объектно-ориентированное программирование
4.5 Объектно-ориентированное программирование4.5 Объектно-ориентированное программирование
4.5 Объектно-ориентированное программирование
DEVTYPE
 
5.5 Ключевое слово friend
5.5 Ключевое слово friend5.5 Ключевое слово friend
5.5 Ключевое слово friend
DEVTYPE
 
4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка
DEVTYPE
 
5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе
DEVTYPE
 
2.3 Указатели и массивы
2.3 Указатели и массивы2.3 Указатели и массивы
2.3 Указатели и массивы
DEVTYPE
 
3.6 Константность
3.6 Константность3.6 Константность
3.6 Константность
DEVTYPE
 
4.6 Особенности наследования в C++
4.6 Особенности наследования в C++4.6 Особенности наследования в C++
4.6 Особенности наследования в C++
DEVTYPE
 
6. Generics. Collections. Streams
6. Generics. Collections. Streams6. Generics. Collections. Streams
6. Generics. Collections. Streams
DEVTYPE
 
3.4 Объекты и классы
3.4 Объекты и классы3.4 Объекты и классы
3.4 Объекты и классы
DEVTYPE
 
2.4 Использование указателей
2.4 Использование указателей2.4 Использование указателей
2.4 Использование указателей
DEVTYPE
 
2.5 Ссылки
2.5 Ссылки2.5 Ссылки
2.5 Ссылки
DEVTYPE
 
2.7 Многомерные массивы
2.7 Многомерные массивы2.7 Многомерные массивы
2.7 Многомерные массивы
DEVTYPE
 
Квадратичная математика
Квадратичная математикаКвадратичная математика
Квадратичная математика
DEVTYPE
 
1. Введение в Java
1. Введение в Java1. Введение в Java
1. Введение в Java
DEVTYPE
 

Viewers also liked (17)

6.1 Шаблоны классов
6.1 Шаблоны классов6.1 Шаблоны классов
6.1 Шаблоны классов
 
Программирование: теоремы и задачи
Программирование: теоремы и задачиПрограммирование: теоремы и задачи
Программирование: теоремы и задачи
 
3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в Java3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в Java
 
4.5 Объектно-ориентированное программирование
4.5 Объектно-ориентированное программирование4.5 Объектно-ориентированное программирование
4.5 Объектно-ориентированное программирование
 
5.5 Ключевое слово friend
5.5 Ключевое слово friend5.5 Ключевое слово friend
5.5 Ключевое слово friend
 
4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка
 
5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе
 
2.3 Указатели и массивы
2.3 Указатели и массивы2.3 Указатели и массивы
2.3 Указатели и массивы
 
3.6 Константность
3.6 Константность3.6 Константность
3.6 Константность
 
4.6 Особенности наследования в C++
4.6 Особенности наследования в C++4.6 Особенности наследования в C++
4.6 Особенности наследования в C++
 
6. Generics. Collections. Streams
6. Generics. Collections. Streams6. Generics. Collections. Streams
6. Generics. Collections. Streams
 
3.4 Объекты и классы
3.4 Объекты и классы3.4 Объекты и классы
3.4 Объекты и классы
 
2.4 Использование указателей
2.4 Использование указателей2.4 Использование указателей
2.4 Использование указателей
 
2.5 Ссылки
2.5 Ссылки2.5 Ссылки
2.5 Ссылки
 
2.7 Многомерные массивы
2.7 Многомерные массивы2.7 Многомерные массивы
2.7 Многомерные массивы
 
Квадратичная математика
Квадратичная математикаКвадратичная математика
Квадратичная математика
 
1. Введение в Java
1. Введение в Java1. Введение в Java
1. Введение в Java
 

Similar to 5.4 Ключевые слова static и inline

Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Dima Dzuba
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6Technopark
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программированияguestfc8ae0
 
тихонов кв работа с прерываниями в микроконтроллерах в 21 веке
тихонов кв работа с прерываниями в микроконтроллерах в 21 векетихонов кв работа с прерываниями в микроконтроллерах в 21 веке
тихонов кв работа с прерываниями в микроконтроллерах в 21 веке
Kirill Tikhonov
 
ук 03.001.02 2011
ук 03.001.02 2011ук 03.001.02 2011
ук 03.001.02 2011etyumentcev
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7Technopark
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Sergey Platonov
 
C# Desktop. Занятие 16.
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.
Igor Shkulipa
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Yandex
 
Релиз PHP7 - что нас ждет в октябре 2015
Релиз PHP7 - что нас ждет в октябре 2015Релиз PHP7 - что нас ждет в октябре 2015
Релиз PHP7 - что нас ждет в октябре 2015
Andrey Tokarchuk
 
Aspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design Patterns
Andrey Gordienkov
 
AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)
Andrey Gordienkov
 
C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.
Igor Shkulipa
 
Уменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложенийУменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложений
ngrebnev
 
Yuri Trukhin - Software developement best practices
Yuri Trukhin - Software developement best practicesYuri Trukhin - Software developement best practices
Yuri Trukhin - Software developement best practicesbeloslab
 
C++ осень 2012 лекция 9
C++ осень 2012 лекция 9C++ осень 2012 лекция 9
C++ осень 2012 лекция 9Technopark
 
Code Contracts ABC 16.04.2011
Code Contracts ABC 16.04.2011Code Contracts ABC 16.04.2011
Code Contracts ABC 16.04.2011Dmytro Mindra
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
Igor Shkulipa
 

Similar to 5.4 Ключевые слова static и inline (20)

Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программирования
 
тихонов кв работа с прерываниями в микроконтроллерах в 21 веке
тихонов кв работа с прерываниями в микроконтроллерах в 21 векетихонов кв работа с прерываниями в микроконтроллерах в 21 веке
тихонов кв работа с прерываниями в микроконтроллерах в 21 веке
 
ук 03.001.02 2011
ук 03.001.02 2011ук 03.001.02 2011
ук 03.001.02 2011
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
 
C# Desktop. Занятие 16.
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.
 
Lecture 3
Lecture 3Lecture 3
Lecture 3
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
 
Релиз PHP7 - что нас ждет в октябре 2015
Релиз PHP7 - что нас ждет в октябре 2015Релиз PHP7 - что нас ждет в октябре 2015
Релиз PHP7 - что нас ждет в октябре 2015
 
Aspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design Patterns
 
AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)
 
C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.
 
C# vs C++
C# vs C++C# vs C++
C# vs C++
 
Уменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложенийУменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложений
 
Yuri Trukhin - Software developement best practices
Yuri Trukhin - Software developement best practicesYuri Trukhin - Software developement best practices
Yuri Trukhin - Software developement best practices
 
C++ осень 2012 лекция 9
C++ осень 2012 лекция 9C++ осень 2012 лекция 9
C++ осень 2012 лекция 9
 
Code Contracts ABC 16.04.2011
Code Contracts ABC 16.04.2011Code Contracts ABC 16.04.2011
Code Contracts ABC 16.04.2011
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
 

More from DEVTYPE

Рукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреРукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебре
DEVTYPE
 
1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства
DEVTYPE
 
1.3 Описательная статистика
1.3 Описательная статистика1.3 Описательная статистика
1.3 Описательная статистика
DEVTYPE
 
1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство
DEVTYPE
 
Continuity and Uniform Continuity
Continuity and Uniform ContinuityContinuity and Uniform Continuity
Continuity and Uniform Continuity
DEVTYPE
 
Coin Change Problem
Coin Change ProblemCoin Change Problem
Coin Change Problem
DEVTYPE
 
Recurrences
RecurrencesRecurrences
Recurrences
DEVTYPE
 
D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применение
DEVTYPE
 
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыДиаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
DEVTYPE
 
ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ
DEVTYPE
 
Скорость роста функций
Скорость роста функцийСкорость роста функций
Скорость роста функций
DEVTYPE
 
Asymptotic Growth of Functions
Asymptotic Growth of FunctionsAsymptotic Growth of Functions
Asymptotic Growth of Functions
DEVTYPE
 
Кучи
КучиКучи
Кучи
DEVTYPE
 
Кодирование Хаффмана
Кодирование ХаффманаКодирование Хаффмана
Кодирование Хаффмана
DEVTYPE
 
Жадные алгоритмы: введение
Жадные алгоритмы: введениеЖадные алгоритмы: введение
Жадные алгоритмы: введение
DEVTYPE
 
Разбор задач по дискретной вероятности
Разбор задач по дискретной вероятностиРазбор задач по дискретной вероятности
Разбор задач по дискретной вероятности
DEVTYPE
 
Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"
DEVTYPE
 
Наибольший общий делитель
Наибольший общий делительНаибольший общий делитель
Наибольший общий делитель
DEVTYPE
 
Числа Фибоначчи
Числа ФибоначчиЧисла Фибоначчи
Числа Фибоначчи
DEVTYPE
 
О-символика
О-символикаО-символика
О-символика
DEVTYPE
 

More from DEVTYPE (20)

Рукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреРукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебре
 
1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства
 
1.3 Описательная статистика
1.3 Описательная статистика1.3 Описательная статистика
1.3 Описательная статистика
 
1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство
 
Continuity and Uniform Continuity
Continuity and Uniform ContinuityContinuity and Uniform Continuity
Continuity and Uniform Continuity
 
Coin Change Problem
Coin Change ProblemCoin Change Problem
Coin Change Problem
 
Recurrences
RecurrencesRecurrences
Recurrences
 
D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применение
 
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыДиаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
 
ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ
 
Скорость роста функций
Скорость роста функцийСкорость роста функций
Скорость роста функций
 
Asymptotic Growth of Functions
Asymptotic Growth of FunctionsAsymptotic Growth of Functions
Asymptotic Growth of Functions
 
Кучи
КучиКучи
Кучи
 
Кодирование Хаффмана
Кодирование ХаффманаКодирование Хаффмана
Кодирование Хаффмана
 
Жадные алгоритмы: введение
Жадные алгоритмы: введениеЖадные алгоритмы: введение
Жадные алгоритмы: введение
 
Разбор задач по дискретной вероятности
Разбор задач по дискретной вероятностиРазбор задач по дискретной вероятности
Разбор задач по дискретной вероятности
 
Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"
 
Наибольший общий делитель
Наибольший общий делительНаибольший общий делитель
Наибольший общий делитель
 
Числа Фибоначчи
Числа ФибоначчиЧисла Фибоначчи
Числа Фибоначчи
 
О-символика
О-символикаО-символика
О-символика
 

5.4 Ключевые слова static и inline

  • 1. Программирование на языке C++ Лекция 5 Ключевые слова static и inline Александр Смаль 1/9
  • 2. Глобальные переменные Объявление глобальной переменной: extern int global; void f () { ++ global; } Определение глобальной переменной: int global = 10; Проблемы глобальных переменных: ∙ Масштабируемость. ∙ Побочные эффекты. ∙ Порядок инициализации. 2/9
  • 3. Статические глобальные переменные Статическая глобальная переменная — это глобальная переменная, доступная только в пределах модуля. Определение: static int global = 10; void f () { ++ global; } Проблемы статических глобальных переменных: ∙ Масштабируемость. ∙ Побочные эффекты. 3/9
  • 4. Статические локальные переменные Статическая локальная переменная — это глобальная переменная, доступная только в пределах функции. Время жизни такой переменной — от первого вызова функции next до конца программы. int next(int start = 0) { static int k = start; return k++; } Проблемы статических локальных переменных: ∙ Масштабируемость. ∙ Побочные эффекты. 4/9
  • 5. Статические функции Статическая функция, доступная только в пределах модуля. Файл 1.cpp: static void test () { cout << "An"; } Файл 2.cpp: static void test () { cout << "Bn"; } Статические глобальные переменные и статические функции проходят внутреннюю линковку. 5/9
  • 6. Статические поля класса Статические поля класса — это глобальные переменные, определённые внутри класса. Объявление: struct User { ... private: static size_t instances_; }; Определение: size_t User :: instances_ = 0; Для доступа к статическим полям не нужен объект. 6/9
  • 7. Статические методы Статические методы — это функции, определённые внутри класса и имеющие доступ к закрытым полям и методам. Объявление: struct User { ... static size_t count () { return instances_; } private: static size_t instances_; }; Для вызова статических методов не нужен объект. cout << User :: count (); 7/9
  • 8. Ключевое слово inline Советует компилятору встроить данную функцию. inline double square(double x) { return x * x; } ∙ В месте вызова inline-функции должно быть известно её определение. ∙ inline функции можно определять в заголовочных файлах. ∙ Все методы, определённые внутри класса, являются inline. ∙ При линковке из всех версий inline-функции (т.е. её код из разных единиц трансляции) выбирается только одна. ∙ Все определения одной и той же inline-функции должны быть идентичными. ∙ inline — это совет компилятору, а не указ. 8/9
  • 9. Правило одного определения Правило одного определения (One Definition Rule, ODR) ∙ В пределах любой единицы трансляции сущности не могут иметь более одного определения. ∙ В пределах программы глобальные переменные и не-inline функции не могут иметь больше одного определения. ∙ Классы и inline функции могут определяться в более чем одной единице трансляции, но определения обязаны совпадать. Вопрос: к каким проблемам могут привести разные определения одного класса в разных частях программы? 9/9