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

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

1

30.05.2013, 16:28

Kleine Frage zu C++

Ich hab nur eine kurze Frage, reicht es Schlüsselwörter wie const oder inline im Header zu verwenden und können diese dann bei der Implementierung weg gelassen werden?

Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
// Foo.h

class Foo{
    void method(const int i);
}

// Foo.cpp

void Foo::method(int i){ // trotzdem const int?

}

FSA

Community-Fossil

  • Private Nachricht senden

2

30.05.2013, 16:33

Nein. Die Variable i ist nicht mehr const.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

3

30.05.2013, 16:43

Okay Dankeschön, ich denke mal das gilt für alle Schlüsselwörter?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

30.05.2013, 16:51

inline würde ich Dir generell raten wegzulassen. Das macht der Compiler oder eben nicht. Das Schlüsselwort ist ziemlich überflüssig geworden.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

5

30.05.2013, 17:08

War nur als Beispiel.

6

30.05.2013, 18:30

inline würde ich Dir generell raten wegzulassen. Das macht der Compiler oder eben nicht. Das Schlüsselwort ist ziemlich überflüssig geworden.
Das stimmt. Inline selbst hinzuschreiben weil man sich bessere Performance erhofft ist ziemlich überflüssig. Außerdem kann man das selbst meistens schlechter beurteilen als der Compiler.

Inline macht aber auch aus anderen Gründen Sinn: Wenn man ein Framework schreibt und eine Funktion dort als inline markiert, taucht sie im Binary nur auf wenn sie verwendet wird. Bei großen Funktionen und engen Größenvorgaben fürs Binary kann man das brauchen (embedded oder demo-bereich).

Inline hat aber auch Nachteile, auch wenn der Compiler das automatisch setzt. Deshalb kann man den Compiler anweisen, es nicht zu benutzen. Wenn das Programm abstürzt oder man es mit dem Debugger durchstept erzeugt eine mit inline markierte Funktion keinen Eintrag in der Stacktrace. Dessen sollte man sich bewusst sein, wenn man auf der Ebene debuggt.

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

7

30.05.2013, 21:48

Falsch und falsch. Bzw: "nicht ganz richtig".

a) Quasi jede beliebige Funktion wird vom Linker rausgeworfen, wenn sie nicht benutzt wird - egal ob inline oder nicht.
b) Inline-Funktionen tauchen nur dann im Stacktrace nicht auf, wenn Du einen Release-Build debuggen willst. Dann tauchen da aber auch compile-inline Funktionen nicht auf. Und im Debug-Build sind standardmäßig alle Funktionen nicht geinlined, egal was davon steht.

Ansonsten ist inline heutzutage wirklich nur noch Syntax, um Linkerfehlern wegen doppelter Definition aus dem Weg zu gehen. Den Rest macht der Compiler.

Und zur eigentlichen Frage: Schlüsselwörter haben je nach Kontext halt verschiedene Bedeutungen. Für const und volatile gilt, was Du schriebst: die dürfen gegenüber der Deklaration in der Funktionsdefinition hinzugefügt werden oder fehlen - das sollte egal sein. Ist es aber manchmal nicht, wie ein Bugreport zu VS2012 von Krishty besagt.

Andere Schlüsselwörter wie z.B. static haben aber wieder ganz andere Bedeutungen. Für die gilt das also so allgemein nicht.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

Werbeanzeige