Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

21.08.2006, 11:22

Konstante Variablen und Funktionen

Ich hätte da mal eine ganz allgemeine Frage. Was habe ich davon eine Variable oder eine Funktion als Konstant zu deklarieren?

Mir ist klar das wenn ein anderer dann meine Variablen benutzt das er diese nicht aus versehen verändert. Aber Funktionen ??

Viele Grüße,
Thorsten

2

21.08.2006, 11:36

Der Compiler kann bei konstanten Deklarationen Optimierungen durchführen.

3

21.08.2006, 12:11

Ah ja. D.h. es ändert nix am Code oder am Ablauf sondern "nur" an der Performance ? Also sollte man Grundsätzlich const verwenden wenn möglich ?

Anonymous

unregistriert

4

21.08.2006, 12:15

Zitat von »"VeilOfOblivion"«

Ah ja. D.h. es ändert nix am Code oder am Ablauf sondern "nur" an der Performance ? Also sollte man Grundsätzlich const verwenden wenn möglich ?


Wenn sich die Variable nicht verändert / sich verändern soll: Ja!

5

21.08.2006, 12:18

Ok. Verstanden. Nur was hat es nun mit den konstanten Funktionen auf sich? Was ist daran konstant bzw. wann kann/soll ich die als konstant deklarieren ?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

21.08.2006, 12:37

Eine Funktion kann nicht konstant sein.
Eine Methode hingegen schon.

Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class MyClass
{
public:
    MyClass() : value(0)
    {
    }

    ~MyClass()
    {
    }

    void setValue(int value)
    {
        this->value = value;
    }

    int getValue() const
    {
        return value;
    }

private:
    int value;
};


"getValue" ist konstant (const), d.h. die Methode verändert das Objekt nicht.
"setValue" kann nicht konstant deklariert werden, weil darin "value" verändert wird (das ginge nur, wenn "value" mit mutable deklariert würde).

Angenommen du hast eine Funktion:

C-/C++-Quelltext

1
2
3
4
void doSomething(const MyClass& object)
{
    object.setValue(0); // <= FEHLER!

}


Das geht nicht, weil "doSomething" eine konstante Referenz übergeben bekommt. Auf konstante Referenzen oder Zeiger auf Objekte können nur konstante Methoden aufgerufen werden. "setValue" ist jedoch nicht konstant.

Eine Methode, die das Objekt irgendwie verändert oder auch nur eine Veränderung zulässt (z.B. durch Zeiger), kann nicht const deklariert werden.

7

21.08.2006, 12:44

const sieht zwar auf den ersten blick klar und eindeutig aus, aber das hier mal gelesen zu haben ändert das sicherlich http://duramecho.com/ComputerInformation/WhyHowCppConst.html

8

21.08.2006, 12:52

Aha! Ok. D.h. Methode ist dann als konstant zu deklarieren wenn sie keine Eigenschaften verändert. Oder umgekehrt :
Konstante Objektmethoden können keine Objekteigenschaften ändern.
Diese Regel kann ich aber umgehen in dem ich Eigenschaften die doch verändert werden sollen als "mutable" deklariere.
Außerdem können konstante Objekte nur ihre ebenfalls konstante Methoden aufrufen.
Hab ich das richtig verstanden ?

Werbeanzeige