2017-02-21 147 views
2

我最近正在審查一些代碼,並且遇到了一些我感到困惑的東西。說我有一個功能,int getNewNumber(int num, int dir),像這樣實現的:使用將該變量作爲參數的函數初始化一個變量

int getNewNumber(int num, int dir) { 
    int newNum = num; 
    if(dir == 1) { 
     newNum++; 
    } else { 
     newNum--; 
    } 
    return newNum; 
} 

現在,調用函數時,我有這樣的事情:

int number = getNewNumber(number, 1); 

是它被傳遞到newNum之前初始化爲0?我很困惑你在初始化時如何使用變量作爲參數。

+1

在外部範圍中是否存在另一個具有相同名稱的變量? –

+0

該代碼不應編譯爲C++代碼 - 您的函數需要返回類型。 –

+2

您正在閱讀至少未指定行爲的未初始化變量。 – nwp

回答

3

在傳入newNum之前是否初始化爲0?

也許吧。這取決於上下文。如果變量是全局靜態的,那麼在動態初始化之前它是零初始化的。

如果它是一個自動變量,那麼傳遞到getNewNumber的值是不確定的,並且使用該值具有未定義的行爲。一個體面的編譯器會警告你。

我很困惑你如何在初始化時使用變量作爲參數。

如果該變量沒有被靜態初始化,那麼您不能在自己的初始化中使用它的值,這樣就會導致定義的行爲。

如果變量在動態初始化之前初始化爲零,那麼您可以使用該值,但也可以使用文字零,這對程序的讀者來說會更清楚。我不認爲在自己的初始化中有任何有用的方法來使用變量的值。

0

我真的認爲這取決於編譯器。一般來說,我會把它稱爲不安全的 - 在最好的情況下,你會得到一個具有相同類型的值,或者可以轉換爲這種類型。在最壞的情況下 - 程序將會崩潰。