Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Vad betyder "const" efter ett funktionsnamn?

Postades av 2003-07-07 17:53:41 - Per Hultqvist, i forum c++, Tråden har 11 Kommentarer och lästs av 1809 personer

Jag har i flera exempel sett att det står "const" efter ett funktionsnamn i C++. Vad betyder det?

Exempel :

<code>
class MazeFactory {
public:
virtual Maze* MakeMaze() const { return new Maze; }
};
</code>


Svara

Sv: Vad betyder "const" efter ett funktionsnamn?

Postades av 2003-07-07 19:09:37 - Niklas Jansson

Det står bara efter medlemsfunktioner, inte vanliga. Det innebär att funktionen garanterat går att köra på ett objekt, även om objektet är konstant.

Kan förklara lite närmare senare, har lite bråttom nu...


Svara

Sv: Vad betyder "const" efter ett funktionsnamn?

Postades av 2003-07-07 21:26:08 - Martin Adrian

"const" efter en medlemsfunktionsdeklaration betyder att funktionen inte påverkar objektet på något sätt.

Detta används av kompilatorn för att avgöra om man kan anropa medlemsfunktionen på ett "const" objekt.

exempel
class myClass {
int x;
public:
myClass();
int getConstX() const;
int getX();
}

main() {
const myClass x;
x.getConstX(); // ok
x.getX(); // error
}


Svara

Sv: Vad betyder "const" efter ett funktionsnamn?

Postades av 2003-07-08 08:52:31 - Niklas Jansson

Det exemplet kanske var lite dumt. Skulle snarare angett det här:

class myClass {
int x;
public:
myClass(int X) : x(X) {}
int getX() const
{ return x;}
void setX(int X)
{ x=X;}
}


//...
{
const myClass m = myClass(2);
myClass k = myClass(2);

k.setX(3);
k.getX();
m.getX();
m.setX(3); //FEL!
}


Svara

Sv: Vad betyder "const" efter ett funktionsnamn?

Postades av 2003-07-08 10:34:52 - Per Hultqvist

Tack för svaren...

Tolkar jag det rätt då att ett objekt deklarerat som "const" bara får ändra sitt tillstånd i konstruktorn?

Och att ett objekt som INTE är deklarerat som "const" kan ändra sitt tillstånd antingen i konstruktorn eller med hjälp av de funktioner som EJ är deklarerade som "const"?

/Per


Svara

Sv: Vad betyder "const" efter ett funktionsnamn?

Postades av 2003-07-08 10:52:39 - Niklas Jansson

Nja... nästan rätt.
Ett objekt ändrar inte sitt tillstånd, det sätter sitt initiala tillstånd. Innan konstruktorn är klar har objektet inget tillstånd.

Sen så behöver inte ett objekt vara explicit deklarerat som const för att det skall betraktas som konstant, det finns många andra tillfällen.

Och för att krångla till det ytterligare kan man göra så att vissa medlemsvariabler får ändras trots att objektet är konstant, med keywordet mutable...


Svara

Sv: Vad betyder "const" efter ett funktionsnamn?

Postades av 2003-07-08 15:27:06 - Håkan Borneland

Hej!

Ännu ett inlägg i debatten!
-->Niklas: "Ett objekt ändrar inte sitt tillstånd"
Jo det gör det om det inte är deklarerat som "const".
Ett objekts tillstånd är "summan" av dess medlemsvariabler och relationer, i ett givet ögonblick.
-->Niklas: "Och för att krångla till det ytterligare kan man göra så att vissa medlemsvariabler,
får ändras trots att objektet är konstant, med keywordet mutable..."
Nja, det är väl så att funktioner som är deklarerade som "const" får ändra på variabler som är deklarerade med "mutable".

/Håkan


Svara

Sv: Vad betyder "const" efter ett funktionsnamn?

Postades av 2003-07-08 15:36:58 - Niklas Jansson

<b> >-->Niklas: "Ett objekt ändrar inte sitt tillstånd"
>Jo det gör det om det inte är deklarerat som "const". </b>
Det är lite av ett felcitat. Du har bara tagit med första delen av meningen.
Ett objekt ändrar inte sitt tillstånd _i konstruktorn_. Den får sitt tillstånd, från att tidigare aldrig ha haft något. I medlemsfunktioner ändras tillståndet. Kan hålla med om att det var aningen otydligt, men "sätter sitt initiala tillstånd" har väl svårt att betyda något annat?

<b>
>Nja, det är väl så att funktioner som är deklarerade som "const" får ändra på variabler som är deklarerade med "mutable". </b>
De behöver som sagt inte deklareras som const för att betraktas som konstanta - viktigt att poängtera det.
Och du har nog bara missförstått det jag skrev, kanske lite dåligt formulerat. Jag menar naturligtvis inte att funktionerna ska deklareras med mutable, utan variablerna.


Svara

Sv: Vad betyder "const" efter ett funktionsnamn?

Postades av 2003-07-08 15:58:58 - Håkan Borneland

Hej!

Det var just första delen av citatet jag ville åt, eftersom den kan tydas som att ett objekt aldrig ändrar tillstånd, utan att det bara får ett vid "konstruktionen".
Endast ett förtydligande från min sida, så att ingen missförstår......

Självklart är det variablerna som deklareras som "mutable" det har vi båda skrivit.
Du skrev: "kan man göra så att vissa medlemsvariabler får ändras trots att objektet är konstant".
Det var detta (taget ur sitt sammanhang) som jag svarade på då jag skrev att "mutable"används på de variabler som får/kan ändras av funktioner som är deklarerade som "const".
De kan ju normalt inte ändra någonting (som vi nu vid det här laget vet).
Det är det här som jag anser är funktionen för "mutable".
Kanske är det en kombination av det du skrev, och det jag skriver. :-)
Vad anser du?
Alltid lär man sig något nytt.

/Håkan



Svara

Sv: Vad betyder "const" efter ett funktionsnamn?

Postades av 2003-07-08 16:19:14 - Niklas Jansson

>Du skrev: "kan man göra så att vissa medlemsvariabler får ändras trots att objektet >är konstant".
Ja... då får man ju definiera vad ett "objekt som är konstant" betyder. Jag anser att det är när ett objekt inte förändrar sitt beteende eller sina egenskaper, när det alltid har samma tillstånd. Det är det man vill uppnå när man deklarerar ett objekt som "const", eller när man t.ex. skickar det till en funktion som tar konstanta objekt.

Ok.

>"mutable"används på de variabler som får/kan ändras av funktioner som är deklarerade som "const".
Och det jag menar är att mutable betyder att den variabeln inte är del av ett ojekts egenskaper på något sätt. Är det så, så skall den kunna förändras oavsett om objektet är konstant eller inte.

Personligen ser jag det helst inte i termer av att "det står const framför funktionsnamnet", utan snarare i hur jag ser på objekten och deras funktion. Därför kallar jag objekten konstanta, även om de har variabler som går att ändra.

(och det finns ju dessutom än mer besvär, när vissa saker går att ändra - trots att de inte är mutable...)

Grejen är bara att mutable är så ovanligt att man i regel inte ens behöver tänka på det...


Svara

Sv: Vad betyder "const" efter ett funktionsnamn?

Postades av 2003-07-08 17:33:11 - Håkan Borneland

Håller med om mutable (ovanligt alltså), har själv bara läst om det.

>>"Ja... då får man ju definiera vad ett "objekt som är konstant" betyder. Jag anser att det är när ett objekt inte förändrar sitt beteende eller sina egenskaper, när det alltid har samma tillstånd. Det är det man vill uppnå när man deklarerar ett objekt som "const", eller när man t.ex. skickar det till en funktion som tar konstanta objekt."

Håller med om ovanstående.

>>"Därför kallar jag objekten konstanta, även om de har variabler som går att ändra."

Antar att i det här fallet syftar du på en annan typ av konstanthet.

/Håkan




Svara

Sv: Vad betyder "const" efter ett funktionsnamn?

Postades av 2003-07-08 22:23:35 - Per Hultqvist

Tack för svaret och den efterföljande diskussionen. Sätter tråden som löst, men fortsätt gärna diskussionen...


Svara

Nyligen

  • 12:13 Sex Dolls for Sale
  • 19:42 Online Casinos for Haitian Players
  • 19:38 Rekommendera något intressant
  • 19:13 Международная перевозка грузов
  • 00:01 DL Van Tuning | Exclusive Body Kit
  • 12:08 Indian casino
  • 04:14 Vad finns det för kratomalternativ
  • 14:16 Indian online casino

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 878
27 965
271 772
516
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies