Standard-Objektwerte in Funktionen mit Standardargumentwerten

7

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)? ​​

    
stiv.r 18.06.2013, 08:08
quelle

3 Antworten

11

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:

%Vor%

Wenn dieses Verhalten nicht beabsichtigt ist, dann machen Sie den Konstruktor explicit . Dies erfordert auch eine Änderung des Standardparameters function :

%Vor%

und

%Vor%     
juanchopanza 18.06.2013, 08:10
quelle
5

MyObject wie gezeigt hat eine sogenannte implicit converting constructor von double. Da 0 für Double okay ist, ist der Effekt, den Sie sehen, ähnlich wie bei MyObject (0.0).

    
Balog Pal 18.06.2013 08:11
quelle
4

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.

    
Daniel Daranas 18.06.2013 08:14
quelle

Tags und Links