🖥 Крутые фичи C++, о которых ты мог не знать



☑️Псевдонимы типов

template <typename T>

using dyn_arr = std::vector<T>;

dyn_arr<int> nums; // эквивалентно std::vector<int>



using func_ptr = int (*)(int);


Семантически похоже на использование typedef, однако псевдонимы типов легче читаются и совместимы с шаблонами С++.



☑️Пользовательские литералы

using ull = unsigned long long;



constexpr ull operator"" _KB(ull no)

{

return no * 1024;

}



constexpr ull operator"" _MB(ull no)

{

return no * (1024_KB);

}



cout<<1_KB<<endl;

cout<<5_MB<<endl;


По большей части это будут какие-нибудь реальные единицы, такие как kb, mb, км, см, рубли, доллары, евро и т.д. Пользовательские литералы позволяют вам работать с ними как с другими примитивными типами.

Очень удобно для единиц и измерения.



☑️std::initializer_list

std::pair<int, int> p = {1, 2};

std::tuple<int, int> t = {1, 2};

std::vector<int> v = {1, 2, 3, 4, 5};

std::set<int> s = {1, 2, 3, 4, 5};

std::list<int> l = {1, 2, 3, 4, 5};

std::deque<int> d = {1, 2, 3, 4, 5};



std::array<int, 5> a = {1, 2, 3, 4, 5};


Присваивайте значения контейнерам непосредственно с помощью списка инициализаторов, это справедливо и для вложенных контейнеров.



☑️auto & decltype

auto a = 3.14; // double

auto b = 1; // int

auto& c = b; // int&

auto g = new auto(123); // int*

auto x; // error -- `x` requires initializer


auto-типизированные переменные выводятся компилятором на основе типа их инициализатора



☑️Циклы for по диапазону

std::array<int, 5> a {1, 2, 3, 4, 5};

for (int& x : a) x *= 2;

// a == { 2, 4, 6, 8, 10 }




☑️Делегирование конструкторов

struct demo

{

int m_var;

demo(int var) : m_var(var) {}

demo() : demo(0) {}

};



demo d;


Конструкторы теперь могут вызывать другие конструкторы из того же класса с помощью списка инициализаторов.



Вообще, фичей у плюсов много, используй их для повышения производительности

Вот статья в тему 21 фича современного C++, которые вам обязательно пригодятся «https://habr.com/ru/companies/otus/articles/741428/»



@cpluspluc