C++ (1985年)(シープラスプラス)
C++は1985年Bell Labs ビャーネ・ストロヴストルップ (Bjarne Stroustrup) が開発したC 言語にOOP 機能追加した汎用プログラミング言語で「C with Classes」(1979年起源) ・Class/Template/STL 採用しUnix/Windows/ゲームエンジン (Unreal Engine)/Chrome/MySQL/Android NDK等で大量採用される現代最重要システム言語。
C++ (1985年)
概要
C++は1985年10月Bell Labs ビャーネ・ストロヴストルップ (Bjarne Stroustrup・デンマーク出身・後Texas A&M 大学) が開発したC 言語にOOP 機能追加した汎用プログラミング言語で「C with Classes」(1979年起源) ・Class/Inheritance・Template (C++ 1990年代Generic Programming)・STL (Standard Template Library 1994年Alexander Stepanov)・Exception Handling・Multiple Inheritance (多重継承) ・後継Lambda (C++11 2011年) ・auto 型推論 (C++11) ・smart pointers (unique_ptr/shared_ptr) 採用しUnix/Windows/ゲームエンジン (Unreal Engine・Unity 一部) /Chrome/MySQL/Android NDK/Microsoft Office/Adobe Photoshop/Bloomberg 金融ターミナル等で大量採用される現代最重要システム言語。ISO 標準化: C++98/03/11/14/17/20/23 と継続改良。
主な特徴・仕組み
- 発表: 1985年10月Bell Labs (旧AT&T 研究所) ・Bjarne Stroustrup
- 元代名: 「C with Classes」(1979年起源) →「C++」(1983年・「increment」演算子から)
- 言語パラダイム: マルチパラダイム (OOP+手続き型+ジェネリック+関数型・C++11 以降)
- C 言語互換: 大半のC コードはC++ で動作 (一部例外)
- 静的型付け: コンパイル時型チェック
- コンパイル言語: ネイティブ機械語へコンパイル (GCC/Clang/MSVC)
- 手動メモリ管理: malloc/free→new/delete・後smart pointers (C++11)
- STL (1994年): vector/list/map/set/algorithm 等の汎用コンテナ・Alexander Stepanov (Compaq Cambridge Research Lab)
- 後継: Carbon (Google 2022年・C++ 後継言語実験)
C++ ISO 標準化の歴史
| 標準 | 年 | 主な追加機能 |
|---|---|---|
| C++98 | 1998 | 初の ISO 標準・STL 統合 |
| C++03 | 2003 | バグ修正版 |
| C++11 | 2011 | Lambda・auto・smart pointers・std::move・std::thread |
| C++14 | 2014 | Lambda 改良・generic Lambda |
| C++17 | 2017 | std::optional・std::variant・std::filesystem・if constexpr |
| C++20 | 2020 | Concepts・Modules・Coroutines・Ranges |
| C++23 | 2023 | std::expected・improved Ranges |
| C++26 (策定中) | 2026予定 | リフレクション・改良Modules |
C++11 革命 (2011年)
2003年C++03 から8年ぶりのメジャー更新:
- Lambda 関数: 無名関数・関数型プログラミング機能
- auto 型推論: 型自動推論 (Java var/Go :=/Rust let と類似)
- smart pointers: unique_ptr/shared_ptr・手動メモリ管理から脱却
- std::move: rvalue reference・パフォーマンス向上
- std::thread: 標準スレッドライブラリ (Pthreads/Win32 Threads から脱却)
- range-based for: for (auto x : container) 風シンプル構文
- 意義: 「モダンC++」起点・以降10年で大幅進化
STL (Standard Template Library)
1994年C++ の核心機能:
- 開発者: Alexander Stepanov (Compaq Cambridge Research Lab) ・David Musser
- 構成: Containers (vector/list/map/set/queue/stack)・Algorithms (sort/find/transform)・Iterators (begin/end)・Functors (std::function 等)
- 意義: ジェネリックプログラミング (Template 利用) の標準化・C++ ライブラリの基盤
- 後継: Boost (1998年-) ・C++17 std::filesystem・C++20 Ranges
採用システム (1985-2024年)
- オペレーティングシステム: Windows OS (Microsoft) ・Mac OS X/macOS (一部Apple・Cocoa はObjective-C/Swift) ・Linux カーネル (一部・大半C)
- ブラウザ: Google Chrome (V8 JavaScript Engine)・Mozilla Firefox (Gecko)・Apple Safari (WebKit)・Microsoft Edge (Chromium ベース)
- データベース: MySQL・MariaDB・MongoDB・SQLite・PostgreSQL (一部)
- ゲームエンジン: Unreal Engine (Epic Games)・Unity (一部 C# +C++)・id Tech (Doom)・CryEngine
- 金融: Bloomberg ターミナル・Tradeweb・Citadel 等の高頻度取引 (HFT)
- 科学技術: TensorFlow (一部 C++・Python フロントエンド) ・PyTorch (LibTorch C++)・ROOT (CERN 物理学)
- メディア: Adobe Photoshop/Premiere・Autodesk Maya/3ds Max
- モバイル: Android NDK (Native Development Kit・C++ で高速ライブラリ)
関連技術との違い
| 項目 | C (1972) | C++ (1985) | Java (1995) | Rust (2010) |
|---|---|---|---|---|
| パラダイム | 命令型 | **マルチ (OOP+手続き+ジェネリック+関数型) ** | OOP | マルチ (所有権ベース) |
| 型付け | 静的 | 静的 | 静的 | 静的 (Strong) |
| メモリ管理 | 手動 | 手動+smart pointers (C++11) | GC | 所有権 (Ownership) |
| OOP | なし | **あり (世界標準) ** | あり | あり (Trait) |
| Template/Generics | なし | **あり (Template) ** | あり (Generics・型消去) | あり (モノモーフィゼーション) |
| 用途 | システム/組込み | システム/ゲーム/金融/Office | 企業システム/Android | システム/Web/組込み |
よくある質問 (FAQ)
Q1: C++ と Rust どちらが優れたか? A: 用途次第。C++ は40年の歴史でエコシステム巨大 (Boost・STL・Eigen・OpenCV 等)・既存コード資産膨大。Rust は新しい (2010年-) でメモリ安全性が言語レベル保証 (所有権) ・並行処理安全。Linux カーネル (2022年Linux 6.1 でRust 統合) ・Microsoft Windows (一部Rust) で並走採用・Rust が「現代版C++」評価。
Q2: Carbon (Google 2022年) と C++ の関係は? A: Carbon は Google が2022年7月発表したC++ 後継言語実験・「C++ との完全相互運用性」を維持しつつモダン構文・メモリ安全性向上を狙う。2024年現在実験段階・本格採用は2027-2030年予測。Rust と並ぶ「C++ の現代化候補」。
Q3: なぜC++ がゲームエンジンの標準か? A: (1) ネイティブ機械語コンパイルで最高性能・(2) 手動メモリ管理でGC ストール (Java/C#) 回避・リアルタイム性確保・(3) ハードウェア直接操作可能 (DirectX/Vulkan)・(4) Unreal Engine/Unity 等の30年エコシステム・(5) コンソール (PS5/Xbox Series X) SDK が C++ ベース・全要因で「ゲーミング = C++」確立。
まとめ
- 1985年Bell Labs ビャーネ・ストロヴストルップ開発
- C 言語にOOP 機能追加
- Class/Template/STL
- Unreal Engine/Chrome/MySQL 等で大量採用
- ISO 標準C++98/11/17/20/23 と継続改良