Содержимое
Подсказки компилятору — атрибуты [[likely]] и [[unlikely]] в C++20 В современном C++ важно не только *что* делает код, но и *как часто* выполняются разные ветки. Атрибуты [[likely]] и [[unlikely]] помогают подсказать компилятору, какие условия встречаются чаще — это может улучшить branch prediction и чуть ускорить критичные участки. С C++20 можно писать так: int classify(int x) { if (x >= 0) [[likely]] { return 1; // «обычный» путь } else [[unlikely]] { return -1; // редкий случай } } int main() { std::cout << classify(10) << "\n"; // чаще std::cout << classify(-5) << "\n"; // реже } Здесь мы явно говорим компилятору: позитивные значения — норма, отрицательные — редкость. Внутри if это выглядит аккуратно, без лишних макросов и #ifdef. Атрибуты также работают в switch: const char* to_string_error(int code) { switch (code) { case 0: [[likely]]; return "OK"; case 1: return "Network error"; default: [[unlikely]]; return "Unknown error"; } } Здесь case 0 — самый вероятный путь, а default помечен как маловероятный, но важный для диагностики. ➡️ Такие подсказки не гарантируют ускорения, но помогают компилятору лучше оптимизировать горячие участки и делают намерения разработчика явными прямо в коде. @fsprussia #ФСП#СпортивноеПрограммирование