Membaca dokumentasi, buku, dan kode orang lain — seperti pada tujuh chapter sebelumnya — hampir pasti memunculkan istilah yang belum kita pegang maknanya. Allocator, ODR, vtable: istilah-istilah ini akan muncul berulang kali, dan balik ke chapter asalnya tidak selalu praktis. Chapter terakhir ini merangkum istilah penting course ke dalam satu glosarium berformat tabel, lalu menutup course dengan program kecil yang mencari arti istilah dari input kita — sebuah kamus saku yang bisa dijalankan di terminal.

Cara Menggunakan Glosarium Ini #

Setiap entri terdiri dari tiga bagian: istilah (tetap dalam bahasa Inggris karena itulah bentuk yang kita temui di dokumentasi), arti singkat satu kalimat, dan rujukan section tempat istilah itu dibahas tuntas. Saat sebuah istilah terasa asing saat membaca, buka rujukannya untuk penjelasan utuh; gunakan arti singkat hanya sebagai pengingat cepat. Glosarium ini juga dirancang untuk ditumbuhkan: setiap kali menemukan istilah baru yang memusingkan, tambahkan barisnya sendiri — kebiasaan kecil yang membuat kamus kita selalu lebih relevan daripada kamus siapa pun.

Istilah A sampai Z #

Tabel berikut mengurutkan istilah secara alfabetis:

IstilahArti singkatRujukan section
ABIKonvensi biner antara compiler, library, dan sistem operasi agar kode hasil kompilasi bisa saling menautInteroperabilitas dan Ecosystem
allocatorObjek yang mengatur cara container mengambil dan mengembalikan memoriStandard Library
bindingStructured bindings: memecah struct atau pasangan ke beberapa variabel sekaligusStruktur dan Tipe Data Komposit
containerStruktur data penyimpan kumpulan objek, seperti std::vector dan std::mapStandard Library
dangling pointerPointer yang menunjuk objek yang usianya sudah berakhirPointer dan Reference
elisionCopy elision: penghapusan salinan oleh compilerMove Semantics dan Value Categories
forwarding referenceParameter template T&& yang menerima lvalue maupun rvalueMove Semantics dan Value Categories
headerBerkas deklarasi yang dipakai lewat #includeDasar Pemrograman
include guardPencegah duplikasi deklarasi saat header di-include berkali-kaliBuild System dan Project Structure
iteratorObjek pengarah posisi di dalam containerIterators dan Algorithms
lambdaFungsi tanpa nama yang menangkap variabel di sekitarnyaFungsi
name manglingPengodean nama fungsi menjadi simbol biner unik oleh compilerInteroperabilitas dan Ecosystem
namespaceWilayah penamaan yang mencegah benturan namaDasar Pemrograman
ODROne Definition Rule: satu definisi untuk setiap entitas di seluruh programBuild System dan Project Structure
pointerVariabel yang berisi alamat memori objek lainPointer dan Reference
qualified nameNama lengkap dengan scopenya, seperti std::vectorDasar Pemrograman
RAIIResource Acquisition Is Initialization: usia resource terikat pada usia objekManajemen Memori
smart pointerPointer dengan kepemilikan otomatis: std::unique_ptr dan std::shared_ptrManajemen Memori
templateMekanisme penulisan kode generik yang diinstansiasi compilerGeneric Programming dan Templates
undefined behaviorPerilaku yang tidak didefinisikan standar; hasilnya bisa apa punKeamanan dan Undefined Behavior
vtableTabel fungsi virtual yang menopang polymorphism dinamisPemrograman Berorientasi Objek

Perhatikan bahwa beberapa istilah punya variasi penulisan: dangling pointer sering disingkat dangling, dan include guard cukup disebut guard ketika konteksnya jelas. Dalam percakapan teknis, bentuk panjangnya dipakai pada penjelasan pertama, lalu bentuk pendeknya untuk sisanya.

Kamus Saku dalam Program #

Program berikut membawa 17 istilah inti dari tabel di atas, lalu mencarinya dari input baris per baris. Normalisasi input membuat RAII, raii, dan raii jatuh pada entri yang sama:

cpp
#include <cctype>
#include <iostream>
#include <map>
#include <string>

// Ubah input menjadi kunci pencarian: buang spasi tepi dan turunkan hurufnya,
// sehingga "RAII", " raii ", dan "raii" menemukan entri yang sama.
std::string normalisasi(const std::string& teks) {
    std::size_t awal = teks.find_first_not_of(" \t");
    if (awal == std::string::npos) return "";
    std::size_t akhir = teks.find_last_not_of(" \t");
    std::string hasil = teks.substr(awal, akhir - awal + 1);
    for (char& c : hasil) {
        c = static_cast<char>(std::tolower(static_cast<unsigned char>(c)));
    }
    return hasil;
}

int main() {
    // Kunci huruf kecil; penjelasan berisi arti singkat dan rujukan section.
    const std::map<std::string, std::string> glosarium = {
        {"abi", "Application Binary Interface - konvensi biner antara compiler, library, dan sistem operasi agar kode hasil kompilasi bisa saling menaut. Rujukan: section Interoperabilitas dan Ecosystem."},
        {"allocator", "Objek yang mengatur cara container mengambil dan mengembalikan memori. Rujukan: section Standard Library."},
        {"binding", "Structured bindings - memecah struct atau pasangan ke beberapa variabel sekaligus: auto [a, b] = p. Rujukan: section Struktur dan Tipe Data Komposit."},
        {"container", "Struktur data yang menyimpan kumpulan objek, seperti std::vector, std::map, dan std::string. Rujukan: section Standard Library."},
        {"dangling pointer", "Pointer yang menunjuk objek yang usianya sudah berakhir; dereferensinya adalah undefined behavior. Rujukan: section Pointer dan Reference."},
        {"elision", "Copy elision - penghapusan salinan oleh compiler, misalnya saat mengembalikan objek dari fungsi. Rujukan: section Move Semantics dan Value Categories."},
        {"forwarding reference", "Parameter template berbentuk T&& yang bisa menerima lvalue maupun rvalue; dasar dari std::forward. Rujukan: section Move Semantics dan Value Categories."},
        {"include guard", "Pencegah duplikasi deklarasi ketika sebuah header di-include berkali-kali; versi modernnya #pragma once. Rujukan: section Build System dan Project Structure."},
        {"iterator", "Objek pengarah posisi di dalam container; jembatan antara container dan algorithm. Rujukan: section Iterators dan Algorithms."},
        {"lambda", "Fungsi tanpa nama yang ditulis langsung di tempat dan bisa menangkap variabel di sekitarnya. Rujukan: section Fungsi."},
        {"name mangling", "Pengodean nama fungsi oleh compiler menjadi nama biner unik yang memuat namespace dan tipe parameternya. Rujukan: section Interoperabilitas dan Ecosystem."},
        {"namespace", "Wilayah penamaan yang mencegah benturan nama antar bagian program. Rujukan: section Dasar Pemrograman."},
        {"odr", "One Definition Rule - aturan yang menuntut satu definisi untuk setiap entitas di seluruh program. Rujukan: section Build System dan Project Structure."},
        {"raii", "Resource Acquisition Is Initialization - pola yang mengikat usia resource ke usia objek lewat constructor dan destructor. Rujukan: section Manajemen Memori."},
        {"smart pointer", "Pembungkus pointer yang mengelola kepemilikan otomatis: std::unique_ptr dan std::shared_ptr. Rujukan: section Manajemen Memori."},
        {"undefined behavior", "Perilaku yang tidak didefinisikan standar: program boleh menghasilkan apa pun, termasuk tampak benar lalu salah di compiler lain. Rujukan: section Keamanan dan Undefined Behavior."},
        {"vtable", "Tabel fungsi virtual yang dipakai compiler untuk menerapkan polymorphism dinamis. Rujukan: section Pemrograman Berorientasi Objek."},
    };

    std::cout << "Glosarium C++ - ketik istilah (baris kosong untuk berhenti)\n";
    std::string baris;
    while (std::getline(std::cin, baris)) {
        std::string kunci = normalisasi(baris);
        if (kunci.empty()) break;
        auto it = glosarium.find(kunci);
        if (it != glosarium.end()) {
            std::cout << baris << ": " << it->second << "\n";
        } else {
            std::cout << "Istilah \"" << baris << "\" tidak ada di glosarium.\n";
        }
    }
    return 0;
}

Ketika kita menjalankannya dengan tiga istilah pada input standar — RAII, vtable, dan allocator — Output yang Dihasilkan:

text
Glosarium C++ - ketik istilah (baris kosong untuk berhenti)
RAII: Resource Acquisition Is Initialization - pola yang mengikat usia resource ke usia objek lewat constructor dan destructor. Rujukan: section Manajemen Memori.
vtable: Tabel fungsi virtual yang dipakai compiler untuk menerapkan polymorphism dinamis. Rujukan: section Pemrograman Berorientasi Objek.
allocator: Objek yang mengatur cara container mengambil dan mengembalikan memori. Rujukan: section Standard Library.

Bedah program di atas:

  1. normalisasi(): membuang spasi di tepi dengan find_first_not_of dan find_last_not_of, lalu menurunkan huruf dengan std::tolower; cast ke unsigned char sebelum memanggilnya adalah praktik yang benar karena perilaku std::tolower tidak terdefinisi untuk nilai karakter negatif.
  2. std::map<std::string, std::string>: pasangan istilah dan penjelasan dengan kunci terurut; istilah baru cukup ditambahkan sebagai satu entri tanpa menyentuh logika pencarian.
  3. std::getline(std::cin, baris): membaca satu baris penuh per iterasi sehingga istilah dua kata seperti “dangling pointer” tetap utuh; baris kosong atau akhir input mengakhiri program.
  4. Cabang else: istilah yang tidak dikenal mendapat jawaban eksplisit alih-alih sunyi — program yang ramah pengguna selalu mengonfirmasi apa yang tidak ditemukannya.

Course ini selesai di chapter ini, tetapi belajar C++ justru baru dimulai. Kembalilah ke peta yang kita bangun bersama: cppreference untuk pertanyaan cepat, buku untuk pembingkaian, proposal untuk arah masa depan, dan glosarium ini saat istilah asing muncul lagi. Dengan sumber resmi sebagai kebiasaan, setiap versi C++ yang baru terbit bukan lagi tantangan — melainkan bacaan berikutnya di daftar rujukan kita.