2017-02-21 104 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

我真的认为这取决于编译器。一般来说,我会把它称为不安全的 - 在最好的情况下,你会得到一个具有相同类型的值,或者可以转换为这种类型。在最坏的情况下 - 程序将会崩溃。