const-Correctness
const dokumentiert Unveränderlichkeit und lässt den Compiler unerlaubte Schreibzugriffe ablehnen.
Was ist const-Correctness?
const dokumentiert Unveränderlichkeit und lässt den Compiler unerlaubte Schreibzugriffe ablehnen.
Drücke schreibgeschützte Daten und veränderliche Pointer genau aus.
Wichtige Punkte
- Jeder Pointer verweist auf ein lebendes kompatibles Objekt oder ist null.
- Jede eigene Allokation wird genau einmal freigegeben.
- Formuliere Ownership und const-Schnittstellen eindeutig.
Codebeispiele in C und C++
main.c
#include <stdio.h>
int sum(const int *values, size_t count) {
int total = 0;
for (size_t i = 0; i < count; ++i) total += values[i];
return total;
}
int main(void) {
const int values[] = {2, 4, 6};
printf("%d\n", sum(values, 3));
return 0;
}
12
main.cpp
#include <array>
#include <iostream>
int sum(const std::array<int, 3>& values) {
int total = 0;
for (int value : values) total += value;
return total;
}
int main() {
const std::array values{2, 4, 6};
std::cout << sum(values) << '\n';
}
12
Vergleich zwischen C und C++
Pointer-to-const schützt den Wert, ein const Pointer die Adresse. C++ bietet zusätzlich const-Memberfunktionen.
C
Ownership und Aufräumen sind vom Programmierer durchgesetzte Konventionen.
C++
Container und RAII kodieren Ownership und Aufräumen in Objektlebenszeiten.
Übungsaufgaben
Führe beide Versionen aus und untersuche die unterschiedlichen Garantien.
- Teste null und Allokationsfehler.
- Verwende AddressSanitizer und UndefinedBehaviorSanitizer.
- Dokumentiere Besitz jedes Pointers.