The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Утверждён стандарт C++26

30.03.2026 13:16 (MSK)

Комитет ISO по стандартизации языка C++ завершил утвердил финальным вариант спецификации, образующей международный стандарт "C++26". Представленные в спецификации возможности частично уже поддерживаются в компиляторах GCC, Clang и Microsoft Visual C++. Поддерживающие C++26 стандартные библиотеки реализованы в рамках проекта Boost.

В следующие два месяца утверждённая спецификация будет находиться на стадии подготовки документа к публикации, на которой будет проведена работа по редакторской правке орфографических ошибок и опечаток. В начале ноября результирующий вариант документа будет направлен в ISO для публикации под формальным именем ISO/IEC 14882:2026.

Основные особенности C++26:

  • Реализованы элементы контрактного программирования (Contracts), позволяющие определять формальные спецификации интерфейсов при помощи трёх новых операторов: pre (предусловие), post (постусловие) и contract_assert (проверка утверждения). Оператор "pre" определяет предварительные условия, которые должны быть выполнены перед вызовом (проверка входных данных); "post" - условия, которые должны соблюдаться после выполнения (требования к выходным данным); contract_assert - условия возникновения исключений. Возможность появится в GCC 16.
    
       int f(const int x)
          pre (x != 1) // требования ко входным данным
          post (r : r == x && r != 2) // требования к результату; r - значение с результатом
       {
          contract_assert (x != 3);
          return x;
       }
    
  • Добавлена поддержка рефлексии (Reflection), позволяющей отслеживать и модифицировать элементы программы на стадии компиляции. Добавлены новые операторы "^^" для получения метаинформации о грамматической конструкции и "[:…:]" для выполнения обратного преобразования. Для преобразования и обработки полученной в ходе инспектирования информации предложена библиотека std::meta и доступны такие возможности, как вычисления с константами. Поддержка рефлексии будет добавлена в GCC 16.
    
       constexpr int i = 42, j = 42;
    
       constexpr std::meta::info r = ^^i, s = ^^i;
       static_assert(r == r && r == s);
    
       static_assert(^^i != ^^j);  // 'i' и 'j' имеют различные значения.
       static_assert(constant_of(^^i) == constant_of(^^j));    // 'i' и 'j'  одинаковы
       static_assert(^^i != std::meta::reflect_constant(42));  // отличается от значения 42
    
  • Добавлен оператор "template for" для перебора элементов, таких как пакеты параметров, похожие на кортежи объекты и результаты рефлексии (метаобъекты), на этапе компиляции в стиле обычного цикла. При выполнении "template for" тело цикла раскрывается для каждого элемента и каждая итерация обрабатывается в отдельной области видимости, в которой меняющаяся в цикле переменная является константой. В контексте рефлексии "template for" может применяться для обхода свойств классов или перечислений. Возможность появится в GCC 16.
    
       void f() {
         template for (constexpr int I : std::array{1, 2, 3}) {
           static_assert(I < 4);
         }
       }
    
    будет раскрыто в:
    	
       void f() {
       {
           constexpr auto&& __range = std::array{1, 2, 3};
           constexpr auto __begin = __range.begin();
           constexpr auto __expansion-size = __range.end() - __begin; // 3
    
           {
             constexpr int I = *(__begin + 0);
             static_assert(I < 4);
           }
    
           {
             constexpr int I = *(__begin + 1);
             static_assert(I < 4);
           }
    
           {
             constexpr int I = *(__begin + 2);
             static_assert(I < 4);
           }
         }
       }
    
  • Добавлен фреймворк std::execution для асинхронного и параллельного выполнения кода. Предоставляются объекты scheduler, определяющий планировщик выполнения работ (поток, пул потоков, GPU, event loop), sender, определяющий выполняемую работу, и receiver - обработчик результата.
    
       using namespace std::execution;
       scheduler auto sch = thread_pool.scheduler();
       sender auto begin = schedule(sch);
       sender auto hi = then(begin, []{
          std::cout < "Hello world! Have an int.";
          return 13;
       }); 
    
       sender auto add_42 = then(hi, [](int arg) { return arg + 42; });
    
       auto [i] = this_thread::sync_wait(add_42).value();
    
  • Добавлена библиотека std::simd для распараллеливания выполнения операций над данными при помощи наборов инструкций SIMD, таких как AVX-512 и NEON, с использованием стандартной системы типов C++.
    
        std::simd<float> a = {1.0f, 2.0f, 3.0f, 4.0f};
        std::simd<float> b = {5.0f, 6.0f, 7.0f, 8.0f};
    
        std::simd result = a + b;
    
  • Предложена реализация вектора (массива) переменного размера std::inplace_vector, размещаемого в стеке, размер которого определяется на этапе компиляции. API близок к std::vector, но элементы массива хранятся не в "куче", а внутри объекта.
    
       inplace_vector a(10);
       inplace_vector b(std::move(a));
       assert(a.size() == 10); 
    
  • Добавлена директива "#embed", предназначенная для встраивания в код бинарных ресурсов.
    
       const unsigned char icon_display_data[] = {
           #embed "art.png"
       };
    
  • Добавлена поддержка генерации и обработки исключений на этапе компиляции при ошибках в контексте constexpr.
    
       constexpr std::optional<unsigned> checked_divide(unsigned n, unsigned d) {
    	try {
    		return divide(n, d);
    	} catch (...) {
    		return std::nullopt;
    	}
       }
    
       constexpr date parse_date(std::string_view input) {
    	auto [correct, year, month, day] = ctre::match<"([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})">(input);
    	
    	if (!correct) {
    		throw incorrect_date{input};
    	}
    	
    	return build_date(year, month, day);
       }
    
  • Реализована структура данных std::hive для неупорядоченного хранения данных и обеспечения повторного использования памяти, освободившейся после удалённых элементов. Структура оптимизирована для нагрузок с высокой интенсивностью добавления и удаления элементов в произвольном порядке. В отличие от массивов, удаление элемента в std::hive не вызывает сдвига других элементов, а приводит к пометке удалённого элемента пустым с последующим заполнением освободившейся позиции при добавлении нового элемента.
  • Добавлена библиотека std::linalg c API для линейной алгебры, основанный на BLAS.
  • Добавлена поддержка механизма синхронизации Hazard pointer, позволяющего без выставления блокировок предотвратить освобождение памяти объектов, с которыми продолжается работа в других потоках. При удалении объекта, он лишь помечается удалённым, но занимаемая объектом память освобождается только когда все потоки снимут hazard-указатель, выставляемый во время работы с объектом.
  • Добавлена поддержка механизма синхронизации RCU (Read-Copy Update) - при операциях записи создаётся новый экземпляр объекта, а операции чтения не блокируются, а продолжают работать со старым экземпляром. После завершения изменения новый экземпляр становится активным и новые операции чтения уже производятся с ним, а старый экземпляр удаляется после завершения читающих его потоков.
  • Внесены изменения для усиления безопасности стандартной библиотеки, такие как проверки допустимых значений и выхода за границы буфера. Например, при доступе к элементу "constexpr reference operator[](size_type idx) const;" добавляется проверка условия "idx < size()".
  • Предоставлена возможность использования ключевого слова "constexpr" с разновидностью оператора "new" (placement new) для размещения объекта в заранее выделенной памяти во время компиляции.
  • Добавлена поддержка структурированных привязок (structured binding) в контексте "constexpr", т.е. ссылки на константные выражения теперь сами могут быть константными выражениями. Поддержка реализована для массивов и простых структур.
    
       constexpr int arr[] = {1, 2};
       constexpr auto [x, y] = arr; 
    
  • В структурированные привязки добавлена возможность использования синтаксиса "..." для указания пакетов (pack), захватывающих оставшееся число элементов из присваиваемой последовательности.
    
       auto [x,y,z] = f();       // в переменные  x, y, z будут записаны  три элемента, возвращённые f().
       auto [...xs] = f();       // в пакет xs будут записаны все элементы, возвращённые f().
       auto [x, ...rest] = f();  // В x будет записан первый элемент, а в rest - остальные.
       auto [x, y, ...rest] = f(); // В x будет записан первый элемент, в y - второй, а в rest - третий.
       auto [x, ...rest, z] = f();  // в x - первый, в rest - второй, в z - третий.
    
  • Добавлена поддержка "тривиальной перемещаемости" типов (Trivial Relocatability), позволяющей оптимизировать перемещения объектов заданного типа через их клонирование в памяти без вызова конструкторов или деструкторов. Для классов реализованы свойства memberwise_trivially_relocatable и memberwise_replaceable, а для низкоуровневого перемещения одного или нескольких объектов добавлены функции trivially_relocate_at и trivially_relocate.
  • Реализована поддержка прикрепления функции main() к глобальному модулю и определения функции main() в именованных модулях.
  • Добавлен вариативный оператор "friend" ("friend Ts...").
  • Реализованы атрибуты для структурированных привязок;
  • Добавлен синтаксис '= delete("причина")'.
  • В базовый набор символов включены "@", "$" и "`".
  • Предоставлена возможность применения структурированного связывания (structured binding) в качестве условия в операторах if и switch.
  • Добавлена возможность использования сразу нескольких переменных-заполнителей с именем "_" в одной области видимости, например, теперь являются корректными конструкции:
    
        struct S {
          int _, _; 
        };
        void func() {
          int _, _;
        }
        void other() {
          int _; // ранее выводилось предупреждение в режиме -Wunused
        }
    
  • Предоставлена возможность использования строковых литералов в контексте, в котором они не используются для инициализации массива символов и не попадают в результирующий код, а применяются только во время компиляции для диагностических сообщений и препроцессинга, например, в качестве параметров директив и атрибутов _Pragma, asm, extern, static_assert, [[deprecated]] и [[nodiscard]].
  • Добавлены встроенные функции: "__builtin_is_within_lifetime" для проверки активности альтернативы в объединениях (union) и "__builtin_is_virtual_base_of" для проверки является ли базовый класс виртуальным.
  • Реализованы тривиальные бесконечные циклы без неопределенного поведения.
  • Обеспечен вывод ошибки при удалении указателя на неполный тип.
  • Объявлен устаревшим синтаксис определения вариативных параметров с многоточием без предшествующей запятой (например, когда указывается "void e(int...)" вместо "void e(int, ...)").
  • Запрещено использование макросов для объявления модулей.
  • Переведено в разряд устаревших выполнение неявных преобразований перечисляемых значений в арифметических вычислениях.
    
       int main() {
          enum E1 { e };
          enum E2 { f };
          bool b = e <= 3.7; // устарело
          int k = f - e; // устарело
          int x = +f - e; // OK
       }
    
  • Прекращена поддержка прямого сравнения массивов.
    
       int arr1[5]; 
       int arr2[5]; 
       bool same = arr1 == arr2;
    
  • Объявлен устаревшим шаблонный класс is_trivial.

  1. Главная ссылка к новости (https://herbsutter.com/2026/03...)
  2. OpenNews: Утверждён стандарт C++20
  3. OpenNews: Бьёрн Страуструп призвал стандартизировать профили C++ для безопасной работы с памятью
  4. OpenNews: Fil-C - компилятор для языков C и C++, гарантирующий безопасную работу с памятью
  5. OpenNews: C++ Alliance продвигает в C++ механизмы безопасной работы с памятью, опробованные в Rust
  6. OpenNews: Утверждён стандарт C++17
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/65102-cpp
Ключевые слова: cpp, gcc
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (54) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 14:02, 30/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Экзекуторы добавили!!! Класс!!
     
     
  • 2.56, Judge Dredd (-), 15:53, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Экзекуторы добавили!!! Класс!!

    - Виновен. Ваш автомобиль будет конфискован.
    (booom!)
    - Приговор приведен в исполнение.

     

  • 1.2, mos87 (ok), 14:10, 30/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Что там по БЕЗО работы с памятью?
     
  • 1.3, Аноним (-), 14:10, 30/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Представленные в спецификации возможности частично уже поддерживаются в компиляторах GCC, Clang и Microsoft Visual C++.

    И что характерно НИ ОДИН из компиляторов не поддерживает стандарт полностью!

    library features так вообще - поддерживаемых почти сколько же сколько не поддерживаемых.

    Простите, а это компилятор чего?
    Точно С++26, а не какого-то сабсета недоязыка?

     
     
  • 2.10, Bottle (?), 14:20, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    А всё благодаря великолепным правилам из разряда "А на этой платформе можно точность другую у интов взять", "Мы будем игнорировать существование #pragma once, гнутых расширений и кланговских, давайте вместо этого ещё что-нибудь из Boost потырим в стандарт за триста франков", "плевать, что в сишке есть restrict, нам не нужна производительность и совместимость в плюсах".
     
     
  • 3.26, Аноним (-), 14:37, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да, то что "можно точность другую у интов взять" это еще ладно.
    Если бы в стандарте были только "implementation-defined" с конечным списком вариантов, то было бы ок.

    А вот то, что каждый компилятор может выкинуть какие-то фичи, это вообще бред.
    Если оставить только 2-3 core language features, это всё еще С++? А если оставить одну?))
    Оно ж называется CORE language features, как их можно не реализовывать?

    > "плевать, что в сишке есть restrict, нам не нужна производительность и совместимость в плюсах".

    СИшка это такой же кусок kalʼа)
    Там точно так же не обязаны реализовывать стандарт полностью.

     
     
  • 4.28, oficsu (ok), 14:46, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Оно ж называется CORE language features, как их можно не реализовывать?

    Core language feature означает вовсе не то, о чём вы подумали. Это лишь способ назвать категорию фич, которые (как правило) нереализуемы библиотечно. Те, которые непосредственно про языковую семантику, а не про надстройки, доступные пользователю

     
  • 2.15, Аноним (15), 14:27, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    https://github.com/intel/llvm?tab=readme-ov-file#oneapi-dpc-compiler
     
  • 2.17, oficsu (ok), 14:27, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Стандарт всегда выходит раньше, чем его поддерживают реализации. Потому что прежде чем делать компилятор, нужно сначала всем собраться вместе и договориться, что делать и как именно. И эту роль как раз и выполняет стандартизация
     
     
  • 3.32, Аноним (32), 15:01, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Стандарт всегда выходит раньше, чем его поддерживают реализации.

    Это понятно. Плюс на имплементацию нужно время.
    Но не понятно почему gcc и шланг не поддерживют фичи не то что с++23, а даже с++20.
    Да и более старые тоже.

    GCC не поддерживает
    "Omitting/extending memory allocations" из C++14 core
    [[carries_dependency]] из C++11 core
    Что-то вроде есть, но partial.

    Шланг - аналогично, но другие штуки.
    en.cppreference.com/w/cpp/compiler_support.html

    Времени не хватило? С 2011 года))
    Или "стандарт" такой что на него можно класть болтяру, даже на core?

     
     
  • 4.54, oficsu (ok), 15:40, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > GCC не поддерживает
    > "Omitting/extending memory allocations" из C++14 core

    Этот пропозал уточняет вординг стандарта и не обязывает компиляторы менять что-либо. Он расширяет свободу компиляторов, а не сужает. Так что данный пропозал не "не поддерживается", а попросту неприменим к GCC. Именно поэтому там N/A

    > [[carries_dependency]] из C++11 core

    Это атрибут. Атрибуты специально дизайнились как опциональные игнорируемые фичи. Атрибут допустимо объявить поддерживаемым, если компилятор его просто игнорирует. Так в этом случае поступил, например, clang — единственный, для кого есть метка о поддержке

    Пользователь же никогда на него не мог завязываться, а потому и не может пострадать от отсутствия поддержки. Эта фича как раз была полностью удалена из стандарта в C++26

    Да, в стандарт иногда попадают неудачные фичи, которые на деле оказываются или сложными, или непродуманными, или, как эта, бессмысленными

     

  • 1.4, Аноним (4), 14:11, 30/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    > Добавлены новые операторы "^^" для получения метаинформации о грамматической конструкции и "[:…:]"

    И вот после этого кто-то будет называть раст не читаемым....

     
     
  • 2.13, Аноним (13), 14:26, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Относитесь к этому как к бреду. Я так уже давно делаю.
     
     
  • 3.39, Аноним (39), 15:12, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Я тоже отношусь к расту как к бреду
     

  • 1.5, Аноним (5), 14:12, 30/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Вот теперь точно пора ливать из C++. Непонятно как все это удерживать в голове и при этом решать задачу предметной области. Поскорее бы zig до ума довели, ибо zig + go хватит всем.
     
     
  • 2.9, Ананоним (?), 14:20, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Просто поинтересуйся на каком стандарте пишут компилятор сами разработчики новых компиляторов. По секрету для тебя: на очень старом, а нововведения всё для тебя, дорогой. Чтобы ты боролся с надуманными проблемами, а не использовал простой язык, на котором всё можно было писать вполне успешно и эффективно ещё 20 лет назад.
     
     
  • 3.14, Аноним (5), 14:26, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >поинтересуйся на каком стандарте пишут компилятор

    Это уже не мои проблемы

     
  • 3.30, Сладкая булочка (?), 14:55, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Просто поинтересуйся на каком стандарте пишут компилятор сами разработчики новых компиляторов.

    llvm на 17.

    > ещё 20 лет назад.

    Да, с арифметикой у экспертов туго. Не удивительно, что они что-то бормочат про невозможность сложить два знаковы инта в си.

     
  • 3.31, Аноним (32), 14:55, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > По секрету для тебя: на очень старом, а нововведения всё для тебя, дорогой.

    Вранье же!

    LLVM subprojects are primarily written using C++17
    И уже мигрируют на с++20
    discourse.llvm.org/t/rfc-raise-the-minimum-compiler-requirements-to-move-toward-c-20/88894

    Просто компилятор должен компилится компилятором, который есть в дистре.
    А дистры очень часто поставляют тухляк.
    Если бы дистры не тупили так сильно, то можно было бы и кодовую базу компиляторов переводить на современные стандарты.

     
  • 2.21, Аноним (21), 14:30, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    На то и расчитано что разрабы разбегутся.
     
  • 2.45, Аноним (45), 15:22, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Большую часть из этого вам *обычно* будет не нужна. Но *в некоторых* ситуациях это может очень даже пригодиться. Так что расслабьтесь, не надо - не пользуйтесь и не забивайте голову.
     

  • 1.6, Bottle (?), 14:13, 30/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    По классике жанра: а что там с модулями?
    Что-нибудь продвинулось? Судя по табличке с cppreference.com воз и ныне там.
     
     
  • 2.27, Аноним (27), 14:44, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Модули же приняли ещё в C++20.
     
     
  • 3.33, адын2 (?), 15:01, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    именно
     
  • 2.44, anon5989517240 (?), 15:18, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Вообще они уже работают в достаточной мере чтобы на них переезжать

    https://www.youtube.com/watch?v=fZrDG_he9sE

     
     
  • 3.48, Аноним (45), 15:25, 30/03/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     

  • 1.7, Аноним (-), 14:16, 30/03/2026 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +1 +/
     
  • 1.8, Аноним (8), 14:18, 30/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Может кто-то что-то понимает в современных C++, а я уже нет.
     
     
  • 2.12, Аноним (13), 14:25, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Достаточно Страуструпа (последнее издание). Остальное от лукавого.
     
     
  • 3.42, Аноним (42), 15:13, 30/03/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.46, Аноним (15), 15:24, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    https://intel.github.io/llvm/
     

  • 1.11, Ананоним (?), 14:24, 30/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кто-нибудь здесь знает, появились ли уже трансляторы так называемых современных версий C++ в, например, C++03?
     
  • 1.16, Ананоним (?), 14:27, 30/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Язык превращают в какого-то монстра-уродца.
     
     
  • 2.20, Аноним (13), 14:30, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Психика дороже.
     

  • 1.18, Аноним (-), 14:27, 30/03/2026 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +/
     
  • 1.19, Аноним (21), 14:28, 30/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Котелок не вари!
     
  • 1.22, Аноним (22), 14:33, 30/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Внесены изменения для усиления безопасности стандартной библиотеки, такие как проверки допустимых значений и выхода за границы буфера. Например, при доступе к элементу "constexpr reference operator[](size_type idx) const;" добавляется проверка условия "idx < size()".

    Дамы и господа, свершилось!

     
     
  • 2.25, Аноним (21), 14:36, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    А зачем оно в стандартной библиотеке? Тебе нужно и проверяй.
     
     
  • 3.35, anon5989517240 (?), 15:02, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Затем что баги с границами контейнеров возникают систематически, а если включить проверку по-умолчанию то в худшем случае перф просядет гдет на 1%. Но обычно еще меньше

    > The hardened standard library provides initial cross-platform library security guarantees, including bounds safety for dozens of the most widely used bounded operations on common standard types, including vector, span, string, string_view, and more. For details, see my February 2025 trip report and run (don’t walk) to read the November 2025 ACM Queue article “Practical Security in Production: Hardening the C++ Standard Library at Massive Scale” to learn how this is already deployed across Apple platforms and Google services, hundreds of millions of lines of code, with on average 0.3% (a fraction of 1%) performance overhead.

    https://herbsutter.com/2026/03/29/c26-is-done-trip-report-march-2026-iso-c-sta

     

  • 1.23, Аноним (23), 14:33, 30/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Ну весь D уже перетянули к себе? Что ж, было бы неплохо, если бы плюсы каким-то уже перегруженными не были.
     
  • 1.24, Аноним (24), 14:34, 30/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Жаль, что не завезли profiles, которые предлагал Строуструп.
     
     
  • 2.37, anon5989517240 (?), 15:07, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, обидно прям. Вроде как перенесли на с++ 29
     

  • 1.29, Аноним (27), 14:53, 30/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Добавлена поддержка рефлексии (Reflection), позволяющей отслеживать и модифицировать элементы программы на стадии компиляции.
    > Добавлен оператор "template for" для перебора элементов, таких как пакеты параметров, похожие на кортежи объекты и результаты рефлексии (метаобъекты), на этапе компиляции в стиле обычного цикла.

    Теперь-то достаточно языковых средств, чтобы разработчики Qt могли ими заменить свой Meta-Object Compiler (moc) ?

     
     
  • 2.38, anon5989517240 (?), 15:10, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    На самом деле не факт - смотря как они решат реализовывать.

    В рамках текущей рефлексии работает интроспекция только для структур данных и функций, но она например пока не позволяет достаточно гибко генерировать код методов (насколько я понимаю) так что если Qt и начнет перетаскивать moc туда то или не весь, или будут ждать с++29 😒

     
  • 2.55, Аноним (45), 15:44, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Теперь-то достаточно языковых средств, чтобы разработчики Qt могли ими заменить свой Meta-Object Compiler (moc) ?

    https://www.qt.io/blog/c26-reflection-qrangemodel

    > The obvious question is then if and how we plan to use C++26 reflections to replace moc. I have not done a feature-by-feature comparison between the meta object data we need to generate, and what we can get out of std::meta; but it seems that we can make the C++ compiler do much of the work that moc does. The biggest challenge might be the signals: and slots: member function blocks; we might have to annotate every function separately.

     

  • 1.36, iPony128052 (?), 15:05, 30/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > Добавлена поддержка рефлексии (Reflection)

    Даже не верится... Сколько лет ждал.

     
  • 1.40, Аноним (40), 15:12, 30/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Реализованы тривиальные бесконечные циклы
    > без неопределенного поведения.

    Ахаха! Ну надо же!
    Оказывается могут когда хотят))
    Всего лишь 40 лет понадобилось.

     
  • 1.41, Аноним (1), 15:13, 30/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Великий и ужасный 26
     
  • 1.43, Христианин (?), 15:17, 30/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Во имя ОтцаиСынаиСвятагоДуха.
    Скажите: а смысл в таких новшествах ?
    Раньше вместо пре - был конструктор
    вместо пост - деструктор
    Но я давно не в теме.
     
     
  • 2.47, anon5989517240 (?), 15:25, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Конструктор и деструктор можно только к объекту применить,
    а эти проверки можно к аргументам отдельных функций привязывать - эт в других кейсах нужно.

    Плюс там можно гибко вырезать из компиляции эти проверки если надо.

     
     
  • 3.50, Христианин (?), 15:35, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    СпасиБог что не прошли мимо.
    Я это понимаю, но неужели нельзя предусмотреть в объявлении класса ?
    Для каких целей нужен новый инструмент
    Разрешение использования _ - действительно полезная вещь
     
     
  • 4.51, Христианин (?), 15:37, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    вернее в реализации класса ?
    Давно отстал от темы.
    Сдавал плюсы в начале нулевых на хорошо -4.
    Ныне в Белоруссии 10балльная система оценок.
    учителям больше чем пятибальная нравится
     
  • 2.52, Аноним (45), 15:37, 30/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Вы путаете конструкторы/деструкторы (которые про инициализацию и освобождение ресурсов) и пре/постусловия (которые про состояние программы в данный момент времени).
     

  • 1.49, НяшМяш (ok), 15:29, 30/03/2026 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +/
     
  • 1.53, Аноним (53), 15:39, 30/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Сколько раз еще С++ нужно жахнуть дефибриллятором?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2026 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру