Avatar billede Simon Praktikant
28. august 2003 - 17:04 Der er 7 kommentarer og
1 løsning

const funktion

Hvilken betydning får det i C når:
1) en funktion erklæres const?
2) parametrene i en funktionskald erklæres const?
Avatar billede arne_v Ekspert
28. august 2003 - 17:17 #1
re 2)

At argumentet ikke kan ændres.
Avatar billede arne_v Ekspert
28. august 2003 - 17:18 #2
re 1)

At den ikke ændrer på objektets data.
Avatar billede Simon Praktikant
28. august 2003 - 17:20 #3
hvis det ikke er objektorienteret.
funktionen tilhører ikke nogen klassen, hvad betyder det da at den er erklæret const?
Avatar billede bertelbrander Novice
28. august 2003 - 17:39 #4
Man kan ikke lave const funktioner i C. At lave en funktion const giver kun mening med funktioner i en klasse.
Hvordan ser funktionen ud?
Avatar billede segmose Nybegynder
29. august 2003 - 11:23 #5
class andet {
  int noget(const char * const ptr) const {
    return strlen(ptr)+1;
  }
};

const pointer (vi lover ikke at ændre pointeren) til const char (og heller ikke det pointeren peger på) funktion der ikke ændre andre data som sideeffekt.
Avatar billede segmose Nybegynder
29. august 2003 - 11:25 #6
Det betyder så at man ikke kan gøre sådan:

class andet {
  int sideeffekt;

  int noget(const char * const ptr) const {
    sideeffect++; // fy
    ptr++;  // fy
    (*ptr) = 'a';  // fy
    return strlen(ptr)+1;
  }
};
Avatar billede bertelbrander Novice
29. august 2003 - 23:23 #7
Man kan lave sideeffekt mutable, så kan man godt ændre den i en const funktion.
(Jeg vil dog mene at mutable er en af de mere sære opfindelser i C++.)
Avatar billede olennert Nybegynder
30. august 2003 - 09:56 #8
bertelbrander>
Ja, men til ting som eksempelvis mutexes, semaforer, condition variabler og den slags er det uundværligt. Men man er selv ude om det, hvis man bare smider mutable ind på variabler, for at kunne ændre dem fra en const funktion.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester