Słowo kluczowe const (C/C++) – Kiedy przekazuje się stałe do funkcji
Jeżeli ktoś potraktował moje rady, bardzo surowo może natrafić na problem który dzisiaj omówię.
W poprzednim poście opisywałem taki przypadek:
#include <stdio.h>
int fun(int* x)
{
return 2*(*x);
}
int main(void)
{
int a = 5;
printf("%d n", fun(&a));
return 0;
}
Wszystko działa poprawnie, gdyż korzystamy z zmiennej a. Jednak problem się pojawia gdy chcemy do funkcji przekazać stałe wyrażenie, tak aby pominąć użycie zmiennej.
#include <stdio.h>
int fun(int* x)
{
return 2*(*x);
}
int main(void)
{
printf("%d n", fun(5));
return 0;
}
Kompilator zgłasza błąd ponieważ do funkcji fun trzeba podać adres a nie wartość. A nie można wyciągnąć adresu za pomocą operatora '&’.
Są dwa sposoby na ominięcie tego problemu:
- przekazywać do funkcji wartość nie wskaźnik
- skorzystanie z C++ i jego możliwości przekazywania argumentów jako referencji
Działający kod wyglądałby tak:
#include <stdio.h>
int fun(const int& x)
{
return 2*x;
}
int main(void)
{
int a = 5;
printf("%d n", fun(5));
return 0;
}
Bardzo ważne jest słowo kluczowe 'const’ wewnątrz paramentu w funkcji. Bez tego kompilator (Visual Studio 2011) będzie zgłaszał błąd o treści:
error C2664: 'fun’ : cannot convert parameter 1 from 'int’ to 'int &’