2011-09-12 26 views
2

所以我有一個在C++中創建的類,需要將其轉換爲vb.net,但是我轉換某個函數的某個部分時遇到了問題。什麼是與& - > double的變量&

void deg_min_sec2decimal(double deg, double min, double sec, double& dec_deg) 
{ 
    dec_deg = (deg+min/60.0+sec/3600.0); 
} 

什麼類型的變量是「雙&」,我知道一個雙,但有什麼用「&」? 它不是「雙重& dec_deg」,所以它不是一個adres(指針等)?

以及如何將其轉換爲vb.net?

Grtz

回答

6

這是一個參考。這意味着無論您將值設置在函數內部,從外部傳入的原始變量都將具有該值。

您可以通過使用ByRef使函數返回,而不是採取double&該表達式的結果,並設置你會在該函數的結果都通過了這個變量轉換爲VB。

所以,如果你有此之前:

double retval; 
deg_min_sec2decimal(something, something2, something3, retval); 

你會改變,要

Dim retval = deg_min_sec2decimal(something, something2, something3) 

(我不知道VB使語法可能是錯誤的,但你的想法)

我會用後者,因爲通過參數返回的東西通常只用於需要多個返回值時,並且該函數甚至不返回任何東西。

+0

'變暗RETVAL = deg_min_sec2decimal(某物,something2,something3)' - 'DIM'而不在VB.net型從初始推斷的類型,如C++ 11'auto' – MSalters

+0

@MSalters明白了。隨時編輯我的答案在未來出現這樣的錯誤。 –

+0

我不確定您的表單是否被允許。我只知道這個表單是首選的(沒有未初始化的變量作用域),而且我使用過VB.Net的幾次我不需要任何其他表單。 – MSalters

5

雙&僅僅是一個雙按引用傳遞。在VB.NET中,它將被宣佈爲ByRef dec_deg as Double

編輯:但是,我會建議,而不是使用void函數來設置值的引用,只需將返回類型更改爲double並返回表達式,而不必通過引用傳遞變量。

2

double&是一個雙引用。這意味着在這種情況下,函數可以改變傳遞參數的值。

在VB中,您可以通過ByRef參數做到這一點:
Sub deg_min_sec2decimal(deg as Double, min as Double, sec as Double, ByRef dec_deg as Double)

1

是的,這是一個地址( 「參考」 是正確的C++的術語)。無論「&」在左邊還是右邊,C++都不關心空白。

double& d; // Same as... 
double &d; 
1

是的,這是一個地址,但術語是一個參考。意思是,你對參數做了什麼將影響傳遞給它的變量。在VB中,equivilant是爲ByRef字:

sub someFunc(ByRef someVar as double) 
相關問題