Modyfikator const przy argumentach funkcji
Argument formalny funkcji może być poprzedzony modyfikatorem const. Oznacza to, że po wywołaniu nie będzie można modyfikować takiego argumentu.
void f(const int& x, const int* y, const int z)
{
x += 5; // BŁĄD kompilacji, x jest stałą referencją
*y += 5; // BŁĄD kompilacji, y jest wskaźnikiem do stałej
z += 5; // BŁĄD kompilacji, z jest stałą
y += 5; // przesunięcie wskaźnika jest poprawne
}
Definiując funkcję należy zdecydować, w jaki sposób argumenty będą do niej przesyłane - przez wartość wskaźnik, czy referencję. Można stosować się do poniższych ogólnych zaleceń, ale są od nich liczne wyjątki
- obiekty typów wbudowanych zwykle przesyłamy przez wartość. Jest to o wiele szybsze niż dostęp za pomocą wskaźnika czy referencji
- obiekty typów wbudowanych przesyłamy przez referencję, jeśli chcemy modyfikować oryginalne obiekty
- tablice przesyłamy z użyciem wskaźnika do stałej (const T* tab), jeśli w funkcji nie modyfikujemy elementów tablicy
- obiekty typów zdefiniowanych przez użytkownika (na przykład obiekty klasy bibliotecznej string) zwykle przesyłamy przez referencję, aby uniknąć ich kopiowania. Jest to najczęstszy sposób używania referencji.
- obiekty typów zdefiniowanych przez użytkownika zwykle przesyłamy przez stałą referencję, jeśli tylko obiekt nie jest modyfikowany wewnątrz funkcji (jest tylko odczytu).
Przykład - modyfikator const w argumentach funkcji