Skip to content

Latest commit

 

History

History
66 lines (54 loc) · 6.98 KB

Lecture 16.md

File metadata and controls

66 lines (54 loc) · 6.98 KB


О фичах

Rvalue references for this

struct t {
	void h();
}

(...).h(); // ... может быть и lvalue и rvalue

struct t { void h()&; //this только lvalue void h()&&; //только rvalue }

Non-static member initializers
Говорит просто во всех конструкторах. в которых не указано - скажи равно этому

struct point {
	float x = 0.f;
	float y = 0.f; 
}

Right angle brackets

vector<vector<int>> b // >> раньше было сдвигом вправо

Extern templates

template <typename T>
struct basic_string {};

extern template struct basic_string<char>; //Подавление инстанцирования

Strongly-typed enums

enum color {
	red, green, blue
};

enum state { initial, waiting, running };

state next(state s) { ... }

color n = next(red); //Неявное преобразование - оч плохо

Нельзя поменять enum сам по себе, т.к сломается си’шный код

enum class color: uint8_t { // Явно указать на базе какого типа
	red, green, blue
};

enum class state { initial, waiting, running };

color n = next(color::red);

В такие enum'ах енумераторы находятся в namespace енума. По умолчанию нельзя применять операторы, нет неявного преобразования между собой и в int
Можно перегрузить операторы.
Из-за возможности указать underline type появилась возможность forwarding declaration

enum class msg_id: uint32_t;