Как избежать скрытых багов из-за неявных конверсий enum?
Классические перечисления ведут себя как обычные
Передать
🔥 Используйте
📣 C++ Ready | #совет
enum class решает проблему одним движением: каждое перечисление становится полноценным типом.Классические перечисления ведут себя как обычные
int и легко «скрещиваются» друг с другом:enum Status { Ok, Error };
enum Color { Red, Green };
set_status(Red); // компилируется без варнингов!Передать
Color вместо Status больше не получится — компилятор остановит сборку (см. код на картинке).enum class по умолчанию; к старым enum возвращайтесь лишь ради legacy-кода.Please open Telegram to view this post
VIEW IN TELEGRAM
❤21👍7🔥5😁2
— Ты уволен
— Почему?
— Мы оплатили GPT-5, ты больше не нужен.
Вы тоже в ах@е с такого расклада? Учился лет 5, потом столько же батрачил за копейки ради опыта — чтобы тебя заменила еб@чая железяка.
А теперь задумайтесь: нейронки развиваются с бешеной скоростью. Поэтому сейчас как никогда нужны спецы для их обучения.
Чтобы в кратчайшие сроки выйти на уровень элиты и стать топом в сфере — подпишитесь на канал @devsp. Его автор раскрывает неочевидные секреты: как в 3 месяца уместить 6 лет обучения, достойно пройти любое собеседование и что делать, чтобы лучшие компании дрались за вас.
А временами подкидывает крутые вакансии и лайфхаки, после которых вас с руками оторвут даже без опыта.
Это всё равно что встретить Нео и войти в 10% тех, кто сломал систему. Подписывайтесь: @devsp
— Почему?
— Мы оплатили GPT-5, ты больше не нужен.
Вы тоже в ах@е с такого расклада? Учился лет 5, потом столько же батрачил за копейки ради опыта — чтобы тебя заменила еб@чая железяка.
А теперь задумайтесь: нейронки развиваются с бешеной скоростью. Поэтому сейчас как никогда нужны спецы для их обучения.
Чтобы в кратчайшие сроки выйти на уровень элиты и стать топом в сфере — подпишитесь на канал @devsp. Его автор раскрывает неочевидные секреты: как в 3 месяца уместить 6 лет обучения, достойно пройти любое собеседование и что делать, чтобы лучшие компании дрались за вас.
А временами подкидывает крутые вакансии и лайфхаки, после которых вас с руками оторвут даже без опыта.
Это всё равно что встретить Нео и войти в 10% тех, кто сломал систему. Подписывайтесь: @devsp
👎25😁4
Один небольшой кусок логики решает, кто в списке окажется впереди, а кто уйдёт вниз, превращая сортировку в понятные читаемые правила.
В этом гайде:
• Разберём, как описывать порядок элементов простыми условиями;
• Покажем, как добавить второй признак сравнения без шума;
• Научимся быстро менять логику сортировки под разные задачи
Освоив такие приёмы, вы перестанете бояться сложных списков и будете управлять ими уверенно каждый день.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤5👍5🤝5
Подсказки компилятору — атрибуты [[likely]] и [[unlikely]] в C++20
В современном C++ важно не только *что* делает код, но и *как часто* выполняются разные ветки. Атрибуты
С C++20 можно писать так:
Здесь мы явно говорим компилятору: позитивные значения — норма, отрицательные — редкость. Внутри
Атрибуты также работают в
Здесь
🔥 Такие подсказки не гарантируют ускорения, но помогают компилятору лучше оптимизировать горячие участки и делают намерения разработчика явными прямо в коде.
📣 C++ Ready | #практика
В современном 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 помечен как маловероятный, но важный для диагностики.Please open Telegram to view this post
VIEW IN TELEGRAM
❤13🔥7👍6🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
|- - -
|
|- - -
|
|- - -
|
|- - -
|
|- - -
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1🔥1