1. Toolchain
# Linux/macOS sudo apt install build-essential clang cmake # Windows winget install Kitware.CMake winget install LLVM.LLVM
Használj egységes clang++ -std=c++20 -Wall -Wextra -Werror beállítást fejlesztéskor. VS Code-hoz ms-vscode.cpptools + CMake Tools.
2. Nyelvi alapok
#include <iostream>
#include <vector>
int main() {
std::vector ints{1, 2, 3};
for (int value : ints) {
std::cout << value << '\n';
}
return 0;
}
Használd a auto-t a sablonos típusokra, de dokumentáld, ha fontos a konkrét típus.
3. Memóriakezelés és RAII
class ScopedTimer {
public:
explicit ScopedTimer(std::string label)
: label_(std::move(label)), start_(std::chrono::steady_clock::now()) {}
~ScopedTimer() {
auto end = std::chrono::steady_clock::now();
std::cout << label_ << " took "
<< std::chrono::duration_cast<std::chrono::microseconds>(end - start_).count()
<< "µs\n";
}
private:
std::string label_;
std::chrono::steady_clock::time_point start_;
};
Preferáld az std::unique_ptr, std::shared_ptr tippeket; nyers pointer csak megfigyelő szerepben legyen.
4. STL és algoritmusok
#include <algorithm>
#include <optional>
std::optional<int> max_score(const std::vector<int>& scores) {
if (scores.empty()) return std::nullopt;
return *std::max_element(scores.begin(), scores.end());
}
A C++20 ranges API (<ranges>) tisztább láncokat ad: auto filtered = scores | std::views::filter(...).
5. Build rendszer
cmake_minimum_required(VERSION 3.26) project(PowerFull LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) add_library(powerfull STATIC src/lib.cpp) target_include_directories(powerfull PUBLIC include) add_executable(powerfull_app src/main.cpp) target_link_libraries(powerfull_app PRIVATE powerfull)
Állíts be CMake preseteket (Debug/Release) és generálj compile_commands.json-t az LSP-nek.
6. Debug és diagnosztika
- Sanitizers:
-fsanitize=address,undefined -fno-omit-frame-pointer. - Valgrind memóriaszivárgáshoz (Linux).
- lldb/gdb launch konfiguráció VS Code-ban.
- cpptrace vagy Crashpad a stack trace-hez productionban.
7. Konkurencia és async
#include <syncstream>
#include <jthread>
std::mutex mutex;
void work(int id) {
std::this_thread::sleep_for(std::chrono::milliseconds(200));
std::osyncstream(std::cout) << "worker " << id << '\n';
}
int main() {
std::jthread t1(work, 1);
std::jthread t2(work, 2);
}
Használd az std::jthread-et, ami automatikusan join-ol. Komplex taskokra nézd a cppcoro / folly könyvtárakat.
8. Templates és Concepts
template<typename T>
concept ScoreContainer = requires(T t) {
t.begin();
t.end();
requires std::totally_ordered;
};
template<ScoreContainer T>
auto top_score(const T& scores) {
return *std::max_element(scores.begin(), scores.end());
}
A concepts megakadályozza a hosszú template hibákat, és jobb dokumentációs eszköz.
9. Profilozás és optimalizálás
- Linux:
perf+ FlameGraph. - Windows: Visual Studio Performance Profiler.
- Microbenchmark:
google/benchmark. - Cache-friendly adatszerkezetek (SoA) és
std::pmrallocátorok.
10. Release és csomagolás
# GitHub Actions példa
name: cpp-ci
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install deps
run: sudo apt install ninja-build
- name: Configure
run: cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
- name: Build
run: cmake --build build --config Release
- name: Tests
run: ctest --test-dir build
Szállításkor állíts be LTO-t (-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON), és használd a conan/vcpkg csomagkezelőt a harmadik féltől származó libekhez.