C++ is an absolute blast
Overall Mood: C++ Is Powerful, Fun for Some, Exhausting for Others
- Many describe modern C++ (≥C++11, especially C++20) as expressive, fast, and “a blast” when used on greenfield or hobby projects.
- Others, after years in the language, say they’re “done” with it: too much complexity, cognitive load, and legacy baggage.
Strengths Highlighted
- Expressiveness: lambdas,
auto, smart pointers, ranges, STL algorithms, constexpr, concepts, and RAII are praised when used well. - Control & performance: C++ remains favored where low-level control and latency matter (games, HFT, embedded, audio, engines).
- Ecosystem: massive body of high‑performance libraries and existing code; cppreference is repeatedly lauded.
Complexity, Footguns, and Safety
- Complaints: multiple initialization forms, confusing iostreams, pointer/array decay, undefined behavior, template error messages,
std::optionalUB on*optwhen empty. - Memory safety: strong concern that unsafe C++ is always available; critics echo calls to move to memory-safe languages for new code.
- Some argue “modern C++ subsets” are fine; others counter that novices and legacy codebases inevitably use unsafe patterns.
Legacy Code vs Modern Style
- Sharp divide between:
- New codebases using modern idioms, RAII, smart pointers, value types, and limited feature sets.
- Large, old codebases mixing every era’s features, heavy templates, manual memory, and convoluted class hierarchies.
- Several note the misery of maintaining the latter and insist the problem is often “bad software, not the language” — but others say C++ makes bad software easier.
Tooling, Build, and Packaging Pain
- Persistent gripes about:
- Headers, preprocessor, slow builds, fragile CMake, and inconsistent compilers/IDEs.
- Immature or awkward package managers (Conan, vcpkg, etc.) vs smoother Python/Rust/JS tooling.
- C++20 modules are seen as promising but incomplete and poorly supported in practice.
Comparisons to Other Languages
- Rust: widely cited as “C++ done right” (traits, borrow checker, Option types, better errors), but also described as verbose, less “fun,” and with a smaller ecosystem.
- C: loved for simplicity but criticized for strings/arrays and lack of safety; C23 borrowing C++ features is debated.
- C#/Java/Kotlin/Python/JS: often preferred for higher-level work, better tooling, and productivity, but lack C++’s raw power or low‑level control.
Learning & Coping Strategies
- Recommendations: use sanitizers (ASAN/UBSAN), stick to a safe modern subset, leverage references like cppreference, and watch “Back to Basics” CppCon talks.
- Some use LLMs to decipher template errors and complex compiler messages.