Написать пост

Какие новые фичи C++ появились в GCC 14

Новости

Не так давно вышла новая версия GNU Compiler Collection — GCC 14.1. Обновление принесло немало новшеств, призванных улучшить компилятор и исправить ошибки Вот самые интересные новые функции для языка C++, появившиеся в этой версии компилятора.

Обложка поста Какие новые фичи C++ появились в GCC 14

7 мая вышла новая версия GNU Compiler Collection (GCC) 14.1. Как и в каждом крупном выпуске, GCC 14 приносит множество нововведений, улучшений и исправлений ошибок.

Вот самые интересные новые функции для языка C++, появившиеся в этой версии компилятора.

Поддержка C++26

Бесконечные циклы без неопределенного поведения

В C++26, как и в C, теперь разрешены тривиальные бесконечные циклы. Это изменение устраняет неопределенное поведение, которое возникало при написании низкоуровневого кода. Например, следующий код больше не вызывает такового:

			void g() {
  while (true);
}

		

Статическое хранение для braced-инициализаторов

Теперь компилятор может оптимизировать код, использующий std::initializer_list, уменьшая количество вызовов memcpy для копирования массивов. Это позволяет размещать массивы в статической памяти.

Неоцененные строки

GCC 14 поддерживает P2361R6, добавляющий понятие неоцененных строк.

Такие строки не используются во время выполнения программы и не конвертируются в исполняемую кодировку, что предотвращает использование числовых escape-последовательностей.

Constexpr cast from void*

Фича P2738R1 позволяет выполнять кастинг из void* в constexpr коде, что упрощает использование различных трюков с type erasure.

Пользовательские сообщения в static_assert

Теперь можно использовать статические утверждения с пользовательскими сообщениями, что делает диагностику ошибок более удобной:

			struct error {
  constexpr int size() const { return sizeof "hello" - 1; }
  constexpr const char* data() const { return "hello"; }
};
static_assert(false, error{});
		

Поддержка C++23

Deducing this

Эта долгожданная функция позволяет добавлять явный параметр this к нестатическим членам функций, что упрощает их перегрузку и уменьшает дублирование кода:

			class S {
  int value;
public:
  template<typename Self>
  int get_add(this Self&& self, int i) { return self.value + i; }
};
		

CTAD от наследуемых конструкторов

GCC 14 теперь поддерживает P2582R1, что позволяет использовать аргумент-вывод для шаблонных классов с наследуемыми конструкторами.

Следите за новыми постами
Следите за новыми постами по любимым темам
378 открытий5К показов