2013-10-01 90 views
2

這可能很容易,我可能只是想念在我面前的東西。然而,我不知道如何確保一個函數參數,通過引用傳遞,可以修改。從本質上講,我需要如下:如何檢查函數參數是否恆定?

bool calculate(double lat, double lon, double dep, 
       double &x, double &y, double &z) 
{ 
    if (x, y, AND z are NOT const) 
    { 
     perform the proper calculations 
     assign x, y, and z their new values 
     return true; 
    } 
    else //x, y, or z are const 
    { 
     return false; 
    } 
} 

「如果」 statment檢查確實是我所需要的

我再次道歉,如果這是已經在這個網站,或者如果它是一個標準庫函數我缺少的是就在我的面前。我一直來這裏,幾乎總是得到一個很好的答案,但是我在這裏已經找不到任何東西了。

+2

如果參數列表中沒有聲明變量,則變量將不是const。 – 0x499602D2

+5

您不能將'const double'傳遞給需要'double&'的函數。你不需要檢查。 – jrok

+0

您可能需要重新設計該函數以獲取三個值,並返回類似於矢量的東西。從長遠來看,推理起來會容易得多。 –

回答

8

如果你有double &x那麼它不是一個常數。如果你有const double &x那麼它是一個常數。

就你而言 - 無需檢查,它們不是常量。該檢查在編譯時間自動執行。

看到這個:

void func(double &x){ X=3.14; } 

double d; 
const double c_d; 
func(d); // this is OK 
func(1.54); // this will give an ERROR in compilation 
func(c_d); // this will also give an ERROR in compilation 

你根本無法調用要與一個常數(非const)引用的函數。

這意味着編譯器會爲您找到一些錯誤 - 就像您的情況一樣,您不必返回truefalse,而且您不需要檢查它以嘗試找到錯誤 - 只需編譯並編譯器會爲你找到這些錯誤。

+1

當然,有人可以使用'const_cast'來說謊這個函數 - 但是沒有辦法檢測到它,所以他們只能忍受後果。 –

+1

@MikeSeymour - true。順便說一句 - 你甚至可以在1.54這樣的數字上做一個'const_cast'嗎? – rabensky

+0

不,您只能將*左值*(如變量)轉換爲*左值*參考。像'1.54'這樣的文字是* rvalue *,所以它不起作用。 –

相關問題