Назад к вопросам
Middle
87
questionbank

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

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech 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; // return type is 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; // result has type 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;
    }
    
  • Гарантированная оптимизация копирования с нулевым оверхедом (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 для кортежей по типу.