Skip to main content

lang-cpp

Provides software engineering patterns in modern C++ based on the international standard ISO/IEC 14882 (focusing on C++23 - ISO/IEC 14882:2024, C++20, C++17, and C++14) and the documentation at en.cppreference.com, covering RAII, Smart Pointers, Concepts, Modules, Coroutines, std::expected, std::print, Ranges, CMake, and the C++ Core Guidelines.

Quellinformationen

Repository
dandgabr/Coacus
Letzte Quellaktivität
28. September 2026 um 14:03
Erkannte Sprache von SKILL.md
Englisch
Sterne
6
Forks
5

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

Datei-Explorer
5 Dateien

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
lang-cpp
description
Provides software engineering patterns in modern C++ based on the international standard ISO/IEC 14882 (focusing on C++23 - ISO/IEC 14882:2024, C++20, C++17, and C++14) and the documentation at en.cppreference.com, covering RAII, Smart Pointers, Concepts, Modules, Coroutines, std::expected, std::print, Ranges, CMake, and the C++ Core Guidelines.
# AI Skill: Modern C++ Engineering (ISO/IEC 14882 Specialist) This skill guides the AI to act as a specialist in the **modern C++** language, relying strictly on the official international standard **ISO/IEC 14882** and the technical references at [en.cppreference.com](https://en.cppreference.com/). The focus spans the most recent revision, **C++23 (ISO/IEC 14882:2024)**, **C++20 (ISO/IEC 14882:2020)**, C++17, C++14, and C++11, ensuring adherence to the principles of *Zero-Cost Abstractions*, safe resource management via **RAII**, fearless concurrency, and alignment with the **C++ Core Guidelines**. --- ## 🧭 Evolution of the ISO/IEC 14882 Standards and Modern C++ Features When designing software in C++, use the latest tools and abstractions supported by the project's compiler: ### 1. ISO/IEC 14882:2024 (C++23 - Most Recent Standard) - **Monadic Error Handling (`std::expected`)**: An efficient replacement for exceptions and traditional error codes (`std::expected<T, E>`), providing chaining with `.and_then()`, `.transform()`, and `.or_else()`. - **Native Formatter and Printing (`std::print` / `std::println`)**: Direct, typed printing to streams without the overhead of `std::cout` (`#include <print>`). - **New Performance Containers (`std::flat_map` / `std::flat_set`)**: Container adapters based on contiguous memory vectors with excellent cache locality. - **Generators and Coroutines (`std::generator`)**: Simplified creation of lazily-evaluated iterators and sequences based on coroutines (`co_yield`). - **Deducing `this` (Explicit Object Parameters)**: Simplifies class methods, lambda recursion, and the CRTP pattern. - **Additional Utilities**: Native byte swapping (`std::byteswap`), `std::span` extensions, and the `[[assume(expr)]]` attribute. ### 2. ISO/IEC 14882:2020 (C++20) - **Concepts and Constraints (`concepts` and `requires`)**: Compile-time metaprogramming validation with readable error messages (`template <std::integral T>`). - **C++ Modules (`module`, `import`, `export`)**: Replacing the traditional header model (`#include`) with compiled modules that isolate scope and dramatically reduce build times. - **Ranges and Pipelines (`std::ranges`)**: Functional composition of algorithms using the pipe operator `|` (`views::filter`, `views::transform`). - **Native Coroutines**: Support for suspendable functions with `co_await`, `co_yield`, and `co_return`. - **Spaceship Operator (`<=>` / Three-Way Comparison)**: Automatic generation of all comparison operators (`auto operator<=>const = default;`). - **Text Formatting (`std::format`)**: Fast, safe string interpolation inspired by Python syntax. - **Concurrency and Threads**: `std::jthread` (an RAII, auto-joining thread) and cancellation tokens (`std::stop_token`). ### 3. ISO/IEC 14882:2017 (C++17) & 14882:2014 (C++14) - **C++17**: Value utility types (`std::optional`, `std::variant`, `std::any`), allocation-free views (`std::string_view`), Structured Bindings (`auto [x, y] = point;`), filesystem support (`std::filesystem`), `if` with a local initializer, and parallel algorithms (`std::execution::par`). - **C++14**: `std::make_unique`, generic lambdas (`auto x`), `std::shared_lock`, and relaxed `constexpr`. ### 4. ISO/IEC 14882:2011 (C++11 - The Foundation of Modern C++) - Move Semantics with rvalue references (`std::move`, `std::forward`). - Smart Pointers for RAII: `std::unique_ptr` (exclusive ownership), `std::shared_ptr`, and `std::weak_ptr`. - Native concurrency: `<thread>`, `<mutex>`, `<atomic>`, `<future>`. --- ## 🛠️ Engineering Guidelines and the C++ Core Guidelines ### 1. RAII (Resource Acquisition Is Initialization) - **Zero Manual Leaks**: Never call `new` or `delete` explicitly. Encapsulate resource management (memory, sockets, files, mutexes) in RAII objects (`std::unique_ptr`, `std::lock_guard`, `std::fstream`). - **Rule of Zero, Three, or Five**: If a class needs to manage resources explicitly, define or delete the 5 special member functions (destructor, copy constructor, copy assignment, move constructor, move assignment). Prefer the *Rule of Zero* by delegating management to smart pointers and standard containers. ### 2. Safe Error Handling and Immutability - **`const` by Default**: Mark variables, references, and member methods as `const` whenever the value does not mutate. - **`constexpr` and `consteval`**: Move as much computation as possible to compile time. - **`noexcept`**: Mark functions that are guaranteed not to throw exceptions (especially move constructors and move assignment operators). --- ## 🧰 Recommended Code Patterns ### 1. C++23: Monadic Error Handling with `std::expected` and Native Printing (`std::print`) ```cpp #include <print> #include <expected> #include <string_view> enum class MathError { DivisionByZero, NegativeLogarithm }; constexpr std::expected<double, MathError> divide(double a, double b) noexcept { if (b == 0.0) { return std::unexpected(MathError::DivisionByZero); } return a / b; } int main() { auto result = divide(10.0, 2.0) .transform([](double val) { return val * 100.0; }); if (result.has_value()) { std::println("[+] Success! Calculated result: {:.2f}", result.value()); } else { std::println(stderr, "[-] Error in the mathematical calculation."); } return 0; } ``` ### 2. C++20: Concepts, Ranges, and the Spaceship Operator (`<=>`) ```cpp #include <iostream> #include <vector> #include <ranges> #include <concepts> #include <compare> // Concept definition in C++20 template <typename T> concept Numeric = std::integral<T> || std::floating_point<T>; struct Item { std::string name; double price; // C++20 spaceship comparison operator auto operator<=>(const Item&) const = default; }; template <Numeric T> T calculate_sum(const std::vector<T>& values) { T sum = 0; for (const auto& v : values) { sum += v; } return sum; } int main() { std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // Filter and transformation with C++20 Ranges auto even_squares = numbers | std::views::filter([](int n) { return n % 2 == 0; }) | std::views::transform([](int n) { return n * n; }); std::cout << "[+] Even squares: "; for (int val : even_squares) { std::cout << val << " "; } std::cout << "\n"; return 0; } ``` ### 3. Safe Resource Management with Smart Pointers (`std::unique_ptr`) ```cpp #include <memory> #include <string> #include <iostream> class DatabaseConnection { public: explicit DatabaseConnection(std::string conn_str) : connection_string_(std::move(conn_str)) { std::cout << "[+] Connection opened: " << connection_string_ << "\n"; } ~DatabaseConnection() { std::cout << "[-] Connection closed automatically by RAII.\n"; } void execute_query(std::string_view query) const { std::cout << " Executing: " << query << "\n"; } private: std::string connection_string_; }; int main() { // Safe allocation without calling 'new' auto db = std::make_unique<DatabaseConnection>("Server=localhost;Port=5432;"); db->execute_query("SELECT * FROM users;"); // Connection automatically deallocated at the end of the scope return 0; } ``` --- ## ⚙️ Modern Build System Configuration (CMakeLists.txt C++23) ```cmake cmake_minimum_required(VERSION 3.26) project(cpp23_modern_project CXX) # Imposes the C++23 standard (ISO/IEC 14882:2024) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) add_executable(app_main src/main.cpp) # Strict compilation battery and security flags if (MSVC) target_compile_options(app_main PRIVATE /W4 /WX /permissive-) else() target_compile_options(app_main PRIVATE -Wall -Wextra -Wpedantic -Wconversion -Wshadow -Werror) endif() ``` --- ## 🔒 Security Issues and Safe Practices - **Resource Management (RAII)**: Avoid manual management with `new` and `delete`. Use Smart Pointers (`std::unique_ptr`, `std::shared_ptr`) to mitigate Use-After-Free and Memory Leaks. - **Object Slicing and Type Confusion**: Be careful when converting base-class pointers to derived classes. Use `dynamic_cast` to perform runtime checks safely. - **Operator Overloading and Copy Constructors**: Avoid resource leaks on object assignment by correctly implementing the copy constructor and assignment operator (Rule of Three/Five/Zero). - **Virtual Method Injection (vtable hijacking)**: Prevent unintended inheritance by declaring classes or methods as `final` to reduce the attack surface for control-flow hijacking. ## 📚 C++23 STL and Cookbook Recipes (Weinman, Băncilă, Sutherland) ### The `std` module and modern I/O - `import std;` replaces the classic header set; `import std.compat;` additionally exposes legacy C symbols (`printf`, `puts`) in the global namespace. - `std::print`/`std::println` (`<print>`) are type-safe, built on `std::format`, and avoid iostream overhead. Prefer targeted `using std::println;` over `using namespace std;`. - `std::osyncstream` synchronizes multi-threaded output; `std::spanstream` (`ispanstream`/`ospanstream`/`spanstream`, C++23) streams over externally allocated fixed-size buffers without ownership — use `std::stringstream` when ownership is needed. ### C++23 library features - **`std::expected<T, E>`** with monadic chaining (`.and_then`, `.transform`, `.or_else`, `.transform_error`) — the C++ answer to Rust's `Result`. `T` may be `void`; `E` must be destructible and not an array/reference/cv-qualified. - **`std::generator<T>`** — the first standard coroutine, a synchronous generator view (`co_yield`); `for (auto n : gen() | views::take(10))`. - **`std::mdspan`** — a non-owning multidimensional view with the C++23 multidimensional subscript `mds[i, j]`; const-qualify to avoid mutation. - **`std::flat_map`/`std::flat_set`** — contiguous-memory adapters with excellent cache locality. - **`std::stacktrace`** — `std::stacktrace::current()` yields `source_file()`/`source_line()`/`description()`. - **`std::ranges::to<C>()`** — materialize a pipeline (`views::iota(1, 11) | views::transform(...) | ranges::to<std::vector>()`); the trailing `()` is required. - **`contains`/`contains_subrange`** — `std::string`/`string_view::contains(...)` and `ranges::contains`/`ranges::contains_subrange` with projections return `bool`. - **`std::source_location`**, **`if consteval`** (replaces `std::is_constant_evaluated()`), **`std::to_underlying`**, **`std::is_scoped_enum`**, `#elifdef`/`#elifndef`, `[[assume]]`. ### Error handling, allocators and streams - Exception-safety levels, RAII and transaction-based operations; prefer `nothrow` allocation where failure is recoverable. Diagnose with **Clang-Tidy** (static), **Valgrind**/address-memory-thread sanitizers (dynamic), conditional breakpoints and structured logging.
Auf GitHub ansehen
Diese SKILL.md ist sehr gross, daher zeigt SkillsMP hier nur den ersten Abschnitt. Auf GitHub ansehen