компилятор обязан инициализировать поля в том порядке, в котором они объявлены
гарантируется, что поля структуры в памяти хранятся в том же порядке, в каком они объявлены. (это для того, если есть структуры с одинаковым порядком полей, то можно было бы сделать reinterpret_cast) тк 8байтные типы кладутся по адресам, кратным 8байт, то возникает потребность padding’a, поэтому могут быть пропуски, между полями пустая структура/класс занимает 1 байт (тк это минимум, сколько может занимать объект в памяти)
Complex c(3.0) - direct initialization Complex c = 6.0 - value initialization
Class name{2, 4.5} - Aggregate initialization не работает с приватными полями или если есть хоть один определенный пользователем конструктор
нельзя делать using для переменных
*this - тот объект, из которого вызывается метод (ссылка на этот объект, lvalue) если объявить структуру в структуре, то её размер не изменится, потому что это не поле и оно пока не существует после объявления структуры можно сразу же объявить переменную такого же типа struct { char c; } a; a - анонимная структура
friend - ключевое слово, позволяющее внешним функциям или классам обращаться к приватным полям и методам
можно достать и поменять значение приватного поля через reinterpret_cast (UB)
идиома copy&swap

гениально, тк в копию передаются все ненужные элементы, которые в свапе и умирают также присваивание самому себе обрабатывать не нужно
Правило трёх Если в классе есть нетривиальный конструктор копирования или нетривиальный оператор присваивания или нетривиальный деструктор то необходимо, чтобы 2 остальных были написаны иначе 99% неправильная логика
Синглтон - такой паттерн класса, который может существовать лишь в единственном экземпляре приватный конструктор, публичная статическая функция возврата ссылки на синглтон
указатели на поля:

p хранит сдвиг относительно начала структуры пример использования: обход графа и обход инвертированного графа. можно написать одну функцию и передавать туда указатели на разные поля указатели на методы используются в Qt
нельзя внутри классов писать экспрешены
можно объявить класс final, тогда нельзя будет от него наследоваться
RAII - Resourse Acuisition Is Initialisation. применимо к указателям и файловым потокам классы std::ifstream/std::ofstream в конструкторе вызывают fopen, а в деструкторе fclose. идея: выделение/захват ресурса в конструкторе, освобождение в деструкторе
complete type - тип, у которого существует определение, а также деструктор не приватный тип, который можно создать
ctors & dtors member funcs and modifiers operator overloading inheritance templates