Ich habe einige seltsame Code gefunden ...Was passiert, wenn der Standardparameterwert in Code definiert ist, der an der Call-Site nicht sichtbar ist?
//in file ClassA.h:
class ClassA {
public:
void Enable(bool enable);
};
//in file ClassA.cpp
#include <ClassA.h>
void ClassA::Enable(bool enable = true)
{
//implementation is irrelevant
}
//in Consumer.cpp
#include <ClassA.h>
....
ClassA classA;
classA.Enable(true);
Offensichtlich seit Consumer.cpp
nur ClassA.h
enthalten und nicht ClassA.cpp
der Compiler in der Lage, um zu sehen, nicht, dass der Parameter einen Standardwert hat.
Wann hätte der deklarierte Standardwert von ClassA::Enable
in der Signatur der Methodenimplementierung irgendwelche Auswirkungen? Würde dies nur passieren, wenn die Methode in Dateien aufgerufen wird, die ClassA.cpp
enthalten?
Wer hat das markiert? Wenn Sie mich abschreiben, sagen Sie mir, warum ich es wenigstens beheben kann. –
Eigentlich war ich es, der dies niederschrieb und der Grund war, dass der OP offensichtlich weiß, dass der richtige Weg darin besteht, dies in die Deklaration und nicht in die Definition zu schreiben. Der OP hat sich gefragt, was die Auswirkungen sind, wenn man so etwas in die Definition einbezieht, und Sie haben geantwortet, ohne die Frage gründlich zu lesen. Und ja, Entschuldigung dafür, dass ich Ihnen den Grund nicht erklärt habe. Ich hätte das tun sollen. – Aamir
Das OP hat nicht erwähnt, dass es in die Erklärung aufgenommen wurde, also schlug ich eine Lösung für das Sichtbarkeitsproblem vor, die er erwähnt hat. –