2013-01-24 9 views

Odpowiedz

7

To jest parametr referencyjny w C++. W Delphi, który odpowiada varparameter.

procedure ABC(var a: Integer; var b: Integer); 

Dokumentacja mówi:

Większość parametrów są albo parametry wartość (domyślnie) lub zmienne (var) parametrów. Parametry wartości są przekazywane przez wartość, a parametry zmienne są przekazywane przez odniesienie.

4
void ABC(int &a, int &b) 

staną

procedure ABC(var a: Integer; var b: Integer); 

var słów kluczowych wskazuje, że chcesz przekazać wartość przez odniesienie, a nie wartości.

+1

'procedura ABC (var a, b: Integer); 'wygląda prostiej. – willys

+2

Tak, rzeczywiście, ale wyraźniej jest pokazać rozszerzony formularz. –

1

Istnieje również procedure ABC(out a: Integer; out b: Integer); Chociaż nie jest to dokładnie parametr var, one również przechodzą do-ref i mają na celu przekazanie wartości. W zależności od semantyki kodu, który przesyłasz, możesz wybrać var lub out dla każdego przypadku z osobna.

+0

Parametr 'out' Delphi dla typu wartości, takiego jak" Integer ", jest zaimplementowany dokładnie tak samo, jak' var'. To raczej kiepskie. Ale kod C++ nie jest podobny do 'out'. Więc nie jestem pewien, dlaczego o tym wspomniałeś. Istnieje również 'const' itd. Itd. –

+0

@DavidHeffernan' Inc (wskaźnik) 'i' Inc (integer) 'są również zaimplementowane w ten sam sposób, co nie oznacza, że ​​jest to ta sama semantyka. Nie znamy semantycznego zamiaru kodu topicstartera i nie wiemy, czy dodatkowa kontrola kompilatora mogłaby mu pomóc, czy nie. obecnie jest często pomijaną funkcją i nie zaszkodzi ją nauczyć. –

+0

Twierdzę, że implementacja 'out' w Delphi sprawia, że ​​często jest to błędna funkcja. Porównaj z C# i westchnij. –

1

Jak inni wspomniałem, equivilent deklaracja Delphi jest procedure ABC(var a, b: Integer);, chyba twoim zamiarem jest, aby zadeklarować C Zewnętrzny/C++ - realizowane funkcyjnego, że kod Delphi mogą dzwonić do, w takim przypadku trzeba podjąć C/Uwzględniono konwencję wywołania funkcji C++. Deklaracja funkcji Delphi, która nie określa konwencji wywoływania, jak wyżej, używa konwencji wywoływania Delphi register (znanej jako __fastcall w C++ Builder). Deklarowana deklaracja C/C++ nie określa konwencji wywoływania, więc używana jest domyślna konwencja wywoływania kompilatora C/C++, która w większości konfiguracji to __cdecl, w którym to przypadku odpowiednia deklaracja Delphi staje się następnie: procedure ABC(var a, b: Integer); cdecl;

Powiązane problemy