Forwarded from Библиотека задач по C++ | тесты, код, задания
Что выведет программа?
Anonymous Quiz
20%
0
16%
99
40%
jumped
10%
Ошибка компиляции
14%
Неопределённое поведение
👍1
Роберт Мартин в "Чистом коде" написал жёстко: комментарий — это признак неудачи. Если вам нужно объяснять код словами, значит, вы написали его недостаточно ясно.
В C++ эта идея получила новое дыхание с приходом
[[nodiscard]], концептов из C++20 и строгой типизации. Тип std::expected<Result, Error> уже сообщает о возможной ошибке без единого слова.Но у этой философии есть тёмная сторона. Когда через год вы видите
static constexpr int MAGIC = 0x5F3759DF — никакое именование не объяснит, что это константа из алгоритма быстрого обратного квадратного корня Quake III. Здесь нужен комментарий и, желательно, ссылка на статью.Самодокументирующийся код работает для структуры. Комментарии работают для контекста и истории.
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5😁2
📌 Хранение float в std::map: правильный способ
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#константная_правильность
std::map требует strict weak ordering. float нарушает его при наличии NaN. std::strong_order спасает.#include <compare>
#include <map>
#include <iostream>
struct FloatCompare {
bool operator()(double a, double b) const {
// strong_order — total order, строго соответствует требованиям map
return std::strong_order(a, b) == std::strong_ordering::less;
}
};
int main() {
std::map<double, std::string, FloatCompare> m;
m[1.0] = "one";
m[-0.0] = "negative zero";
m[+0.0] = "positive zero"; // отдельный ключ! (strong_order различает)
m[std::numeric_limits<double>::quiet_NaN()] = "nan";
m[std::numeric_limits<double>::infinity()] = "inf";
// Все 5 ключей уникальны и упорядочены детерминированно
std::cout << m.size(); // 5
}
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#константная_правильность
👍7