Sobes.tech
Middle

Какви полезни функции и възможности бяха добавени в C++14?

sobes.tech AI

Отговор от AI

  • Обобщени захвати на лямбда изрази (Generic Lambda Captures): Позволява да се захващат променливи по стойност или по референция с автоматично извеждане на типа.

    // C++14
    auto lambda = [x = get_value()] { return x; };
    
  • Извеждане на типове на връщане на функции (Return Type Deduction for Normal Functions): Компилаторът може да определи типа на връщаната стойност на функция, ако може да се извлече от return.

    // C++14
    auto func() {
        return 42; // типът на връщане е int
    }
    
  • Двоични литерали (Binary Literals): Позволява записване на числа в двоична система, използвайки префикси 0b или 0B.

    // C++14
    int binary_value = 0b1101; // 13
    
  • Разделители на цифри в числови литерали (Digit Separators): Позволява използването на апостроф ' за визуално разделяне на цифри в числови литерали.

    // C++14
    long big_number = 1'000'000;
    
  • decltype(auto): Поведението на decltype се прилага към автоматичното извеждане на типа. Запазва реферирането и квалификаторите const, volatile.

    // C++14
    int x = 5;
    int& ref = x;
    decltype(auto) result = ref; // резултатът има тип int&
    
  • Разширени възможности на constexpr:

    • Функции constexpr могат да съдържат оператори if, for, while.
    • Могат да се използват с функции, връщащи void.
    • Позволени са локални променливи.
    // C++14
    constexpr int factorial(int n) {
        int res = 1;
        for (int i = 1; i <= n; ++i) {
            res *= i;
        }
        return res;
    }
    
  • Гарантирана оптимизация на копирането с нулов overhead (Guaranteed Copy Elision - Partial): Частично гарантира премахването на излишното копиране в определени случаи (например при връщане на rvalue от функция). Стана напълно гарантирано в C++17.

  • Атрибути (Attributes): Добавени са нови стандартни атрибути:

    • [[deprecated]]: Посочва, че елементът е остарял, и при използването му компилаторът издава предупреждение.
    • [[carries_dependency]]: Използва се в мултинишово програмиране за оптимизация.
  • std::make_unique: Удобен начин за създаване на обекти, управлявани от std::unique_ptr. Предотвратява някои потенциални проблеми (например изтичане на памет при изхвърляне на изключение).

    // C++14
    auto ptr = std::make_unique<int>(10);
    
  • std::shared_timed_mutex: Добавен за реализиране на блокировки за четене/писане.

  • Малки подобрения в стандартната библиотека: Добавени std::integer_sequence, std::exchange, std::quoted, std::get за кортежи по тип.