Bisher weiß ich, dass Sie, wenn Sie einen Standardwert für ein Argument an eine Funktion übergeben wollen, die ein Objekt ist:
%Vor%Allerdings bin ich in letzter Zeit zu einer interessanten Syntax gekommen, die mich verwirrt. Was passiert, wenn wir die Funktion so aufrufen?
%Vor%Beachten Sie, dass wir ein Objekt und keinen Zeiger übergeben. Der obige Code kompiliert gut, keine Fehler oder Warnungen. Und das ruft immer den Konstruktor mit einem Argument auf - MyObject ist wie folgt definiert:
%Vor%Auch, wo ist dieses Verhalten dokumentiert (weil ich gesucht habe und es nicht finden konnte)?
Der Parameter parameter wird standardmäßig auf MyObject
implizit aus 0
erstellt, indem der Konstruktor MyObject(double)
aufgerufen wird. Mit diesem Konstruktor können Sie MyObjects
folgendermaßen implizit instanziieren:
Wenn dieses Verhalten nicht beabsichtigt ist, dann machen Sie den Konstruktor explicit
. Dies erfordert auch eine Änderung des Standardparameters function
:
und
%Vor%Vorausgesetzt, dass der folgende Ausdruck:
%Vor% Kompiliert und hat einen Wert vom Typ MyObject
, dann kann ein Funktionsaufruf, der ein MyObject
übernimmt, auf die gleiche Weise funktionieren.
Stellen Sie sich diese Funktionssignatur vor:
%Vor%Und der folgende Anrufercode:
%Vor%Dies entspricht diesem zweiten Anrufercode:
%Vor% Weil der Wert von MyObject obj = 0;
gleich dem MyObject
ist, der in dieser Codezeile konstruiert wurde.
Sie gehen nur einen Schritt weiter und stellen einen Standard -Parameterwert bereit, indem Sie die gleiche Regel nutzen.
Tags und Links c++