2016-01-29 92 views
0

如果我有C++代碼:函數參數類型是否必須與C++中的參數類型相同?

void valFunc(float val) 
{ 
    val = 50; 
} 

int main() 
{ 
    int mainVal = 9; 
    valFunc(mainVal); 
    cout << "mainVal: " << mainVal << endl; 
    return 0; 
} 

valFunc的參數是float類型,但參數是int類型。此代碼編譯並正確運行。所以我假設在C++中不關心參數類型和參數類型是否匹配?

另一個問題: 當我將int mainVal = 9更改爲float mainVal = 9.0時,輸出仍然是9而不是9.0。爲什麼它不輸出爲9.0?

回答

0

C++做護理,如果一個參數類型和傳遞給它的值是相同的類型,因爲它是一個強類型語言。然而,這裏發生的是你的整數被隱含地轉換爲一個使其合法的浮點數。通過Microsoft

編輯退房隱式數值轉換的這個表:

因此,有幾件事情你的代碼錯誤。首先你的valFunc本質上對你的mainVal變量沒有任何作用,注意到在你將它傳遞給函數並且沒有賦值爲50之後值仍然是9?這是因爲它是通過按值,基本上需要你的變量的副本,並且任何修改它的功能範圍不存在。爲了糾正這個問題是傳遞通過引用可以通過簡單地追加&運營商到你的類型,所以要做到:

void valFunc(float& val) 
{ 
    val = 50; // Now your mainVal is 50 :) 
} 

好了,所以你的第二個問題:

當我將int mainVal = 9更改爲float mainVal = 9.0時,輸出仍然是9而不是9.0。爲什麼它不輸出爲9.0?

這與您的變量不是浮點值無關,但更多的是控制檯打印您的值的方式。爲了讓控制檯以浮點形式打印您的值,您需要將iomanip頭文件包含到您的項目中,並在輸出值之前聲明爲固定。

例子:

#include <iostream> 
#include <iomanip> 

using namespace std; 

void valFunc(float& val) // Assigning the value will now persist 
{ 
    val = 50; 
} 

int main() 
{ 
    float mainVal = 9; 
    valFunc(mainVal); 
    cout << "mainVal: " << fixed << mainVal << endl; 
    return 0; 
} 

這會的50.000000值打印到控制檯(記住,這是50,而不是9,因爲我加入了參考操作員的valFunc參數和值現在仍然存在,因爲它是通過引用)。

還有一個點睛之筆,你可以添加,使您的控制檯輸出更好一點 - 你可以聲明固定後告訴控制檯多少個小數位印刷setprecision。

實施例:

// Displays mainVal: 50.00 
cout << "mainVal: " << fixed << setprecision(2) << mainVal << endl; 
+0

感謝您的回覆。關於第二個問題,輸出如何不是9.0?另外,你發給我的鏈接是C#,同樣適用於C++嗎? – David

+0

@David檢查我的編輯到我原來​​的答案,我希望這可以幫助:)。 – Beege1

+0

@大衛如果我的答案解決了你的問題,請馬克解決。 :) – Beege1

相關問題