Telegram Group & Telegram Channel
🔹 C++26: ошибочное поведение (Erroneous Behaviour)

В C++ мы обычно говорим о двух категориях поведения:
определённое поведение (well-defined)
неопределённое поведение (undefined behaviour, UB)

Второе — одно из самых пугающих понятий в языке. Это когда программа делает что угодно, и компилятор не обязан предупреждать о проблеме. Примеры UB: выход за границы массива, разыменование нулевого указателя и т.д.

Однако в будущем стандарте C++26 вводится новая категория: ошибочное поведение (erroneous behaviour).

Что такое erroneous behaviour?

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

Erroneous behaviour позволяет:
- Сохранить производительность (в отличие от полного исключения или runtime-проверок)
- Сделать поведение программы более предсказуемым
- Упростить диагностику проблем

📌 Пример

Допустим, в constexpr-функции вызывается функция, не являющаяся constexpr. Сейчас это UB, но в C++26 это будет квалифицироваться как erroneous behaviour, и компилятор обязан будет выдать ошибку на этапе компиляции.


constexpr int foo() {
return std::time(nullptr); // std::time не является constexpr
}


Такой код сейчас может пройти компиляцию при определённых условиях, но в будущем — нет.

🧩 Отличие от UB и других видов поведения

- UB — компилятор может делать что угодно (не выдавать ошибку, не предупреждать, и т.д.)
- Implementation-defined — конкретная реализация (компилятор) должна задокументировать поведение
- Erroneous behaviour — компилятор обязан ругаться

🤔 Почему это важно?

Эта категория позволяет более чётко определять границы корректного кода и помогает разработчикам избегать трудноуловимых багов. Это шаг к более строгой и безопасной разработке на C++ без жёстких ограничений на производительность.

https://www.sandordargo.com/blog/2025/02/05/cpp26-erroneous-behaviour

#cpp #programming

👉 @cpp_lib



tg-me.com/cpp_lib/1912
Create:
Last Update:

🔹 C++26: ошибочное поведение (Erroneous Behaviour)

В C++ мы обычно говорим о двух категориях поведения:
определённое поведение (well-defined)
неопределённое поведение (undefined behaviour, UB)

Второе — одно из самых пугающих понятий в языке. Это когда программа делает что угодно, и компилятор не обязан предупреждать о проблеме. Примеры UB: выход за границы массива, разыменование нулевого указателя и т.д.

Однако в будущем стандарте C++26 вводится новая категория: ошибочное поведение (erroneous behaviour).

Что такое erroneous behaviour?

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

Erroneous behaviour позволяет:
- Сохранить производительность (в отличие от полного исключения или runtime-проверок)
- Сделать поведение программы более предсказуемым
- Упростить диагностику проблем

📌 Пример

Допустим, в constexpr-функции вызывается функция, не являющаяся constexpr. Сейчас это UB, но в C++26 это будет квалифицироваться как erroneous behaviour, и компилятор обязан будет выдать ошибку на этапе компиляции.


constexpr int foo() {
return std::time(nullptr); // std::time не является constexpr
}


Такой код сейчас может пройти компиляцию при определённых условиях, но в будущем — нет.

🧩 Отличие от UB и других видов поведения

- UB — компилятор может делать что угодно (не выдавать ошибку, не предупреждать, и т.д.)
- Implementation-defined — конкретная реализация (компилятор) должна задокументировать поведение
- Erroneous behaviour — компилятор обязан ругаться

🤔 Почему это важно?

Эта категория позволяет более чётко определять границы корректного кода и помогает разработчикам избегать трудноуловимых багов. Это шаг к более строгой и безопасной разработке на C++ без жёстких ограничений на производительность.

https://www.sandordargo.com/blog/2025/02/05/cpp26-erroneous-behaviour

#cpp #programming

👉 @cpp_lib

BY Библиотека C/C++ разработчика


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/cpp_lib/1912

View MORE
Open in Telegram


telegram Telegram | DID YOU KNOW?

Date: |

Why Telegram?

Telegram has no known backdoors and, even though it is come in for criticism for using proprietary encryption methods instead of open-source ones, those have yet to be compromised. While no messaging app can guarantee a 100% impermeable defense against determined attackers, Telegram is vulnerabilities are few and either theoretical or based on spoof files fooling users into actively enabling an attack.

Among the actives, Ascendas REIT sank 0.64 percent, while CapitaLand Integrated Commercial Trust plummeted 1.42 percent, City Developments plunged 1.12 percent, Dairy Farm International tumbled 0.86 percent, DBS Group skidded 0.68 percent, Genting Singapore retreated 0.67 percent, Hongkong Land climbed 1.30 percent, Mapletree Commercial Trust lost 0.47 percent, Mapletree Logistics Trust tanked 0.95 percent, Oversea-Chinese Banking Corporation dropped 0.61 percent, SATS rose 0.24 percent, SembCorp Industries shed 0.54 percent, Singapore Airlines surrendered 0.79 percent, Singapore Exchange slid 0.30 percent, Singapore Press Holdings declined 1.03 percent, Singapore Technologies Engineering dipped 0.26 percent, SingTel advanced 0.81 percent, United Overseas Bank fell 0.39 percent, Wilmar International eased 0.24 percent, Yangzijiang Shipbuilding jumped 1.42 percent and Keppel Corp, Thai Beverage, CapitaLand and Comfort DelGro were unchanged.

telegram from sa


Telegram Библиотека C/C++ разработчика
FROM USA