Материал из Викиконспекты
i8086
регистры общего назначения, сегментные регистры, регистр флагов
некоторые распространенные команды
команды для работы со стеком
соглашения вызова функций
32-битные регистры
stack frame
ошибки: возврат указателя на локальную переменную из функции, buffer-overrun для объектов в стеке
stack-smash protector
toolchain: препроцессор, транслятор, компоновщик
модификатор static
модификатор inline
one definition rule (ODR)
классы
конструкторы
деструкторы
const
ссылки
разница между ссылками и указателями
l-value, r-value
перегрузка операторов
оператор присваивания
разница между конструктором копирования и оператором присваивания
список инициализации
порядок инициализации/разрушения полей класса
volatile
директивы препроцессора
#include <>
#include ""
#define
#if
#else
#endif
#elif
#ifdef
#ifndef
#undef
include guards
#pragma once
#pragma once vs include guards
preprocessor pitfalls
циклический экспанд макросов
циклические зависимости на хедерах
неполные типы
name mangling
перегрузка функций
исключения
RAII
гарантии безопасности исключений
extern "C"
исключения в конструкторах
исключения в деструкторах
stack unwinding
возврат объектов из функции по значению, RVO
передача аргументов по значению, r-value/l-value
callback'и, способы фиксации аргументов у callback'ов
наследование, виртуальные функции, таблицы виртуальных функций
dynamic_cast
проблемы сишного typecast'а с неполными типами и несколькими базами, static_cast
const_cast, reinterpret_cast
зачем нужно виртуальное наследование (несколько баз с разными адресами у одного класса, typecast'ы, исключения)
виртуальное наследование
зачем нужны namespace'ы
namespace'ы, using declaration, using directive, namespace aliases
перегрузка операторов, ADL
зачем нужны шаблоны
базовое представление о шаблонах
два способа реализации шаблонов: Cfront-like, Borland-like, преимущества и недостатки обоих
специализация, частичная специализация
type_traits'ы
Контейнеры STL
Sequences: vector, list, deque
Associative Containers: [unordered][_multi]{set/map}
Итераторы, категории итераторов (Input, Output, Forward, Bidirectional, Random Access)
Примеры алгоритмов
find, find_if, search
remove, remove_if, прием с erase/remove_if
sort, stable_sort, partial_sort, nth_element
Много разговоров на тему того, что хоть явных ограничений на параметры шаблона нет, это не означает что их нет совсем.
копируемость/присваиваемость
требования к operator==
требования к operator<
согласованность operator== и operator<
разница между операторами внутри класса и снаружи (неявное приведение типов)
safe-bool
использование type_traits: SFINAE, tag-dispatching на примере STL
two-phase name lookup
STL: back-inserter, lower_bound, heap_*, priority_queue
const на примере STL
Concepts
anonymous namespaces