Was passiert, wenn der Standardparameterwert in Code definiert wird, der an der Aufrufsite nicht sichtbar ist?

8

Ich habe einen seltsamen Code gefunden ...

%Vor%

Offensichtlich, da Consumer.cpp nur ClassA.h und nicht ClassA.cpp enthielt, wird der Compiler nicht sehen können, dass der Parameter einen Standardwert hat.

Wann hat der deklarierte Standardwert von ClassA::Enable in der Signatur der Methodenimplementierung irgendwelche Auswirkungen? Würde dies nur passieren, wenn die Methode von innerhalb von Dateien aufgerufen wird, die das ClassA.cpp enthalten?

    
sharptooth 17.07.2009, 09:16
quelle

4 Antworten

11

Standardwerte sind nur eine Kompilierzeit Sache. Es gibt keine Standardwerte in kompiliertem Code (keine Metadaten oder ähnliche Dinge). Es ist im Grunde ein Compiler-Ersatz für "Wenn Sie nichts schreiben, werde ich das für Sie angeben." Wenn also der Compiler den Standardwert nicht sehen kann, nimmt an, dass es keinen gibt .

Demo:

%Vor%

Test:

%Vor%     
Mehrdad Afshari 17.07.2009, 09:19
quelle
3

Lassen Sie mich zuerst zugeben, dass dies das erste Mal ist, dass ich diese Art von Code gesehen habe. Setzen Sie einen Standardwert in die Header-Datei IS die normale Praxis, aber das ist nicht.

Ich schätze, dass dieser Standardwert nur aus Code verwendet werden kann, der in der gleichen Datei geschrieben ist, und der Programmierer, der dies geschrieben hat, wollte es in eine Art Leichtigkeit beim Aufruf der Funktion bringen, aber er wollte nicht stören die Schnittstelle (die Header-Datei), die für die Außenwelt sichtbar ist.

    
Aamir 17.07.2009 09:22
quelle
1

Geben Sie den Standardwert in die Deklaration ein, nicht die Definition.

%Vor%     
Sam Harwell 17.07.2009 09:19
quelle
1
  

Würde dies nur bei der Methode passieren   wird innerhalb von Dateien aufgerufen, die   schließe die ClassA.cpp ein?

Das ist richtig. Beachten Sie jedoch, dass dies mit ziemlicher Sicherheit zu mehreren Definitionsfehlern führen wird. Daher ist der Standardwert nur ab dem Definitionspunkt in ClassA.cpp verfügbar.

    
anon 17.07.2009 09:19
quelle

Tags und Links