使用将该变量作为参数的函数初始化变量

时间:2017-02-21 22:18:06

标签: c++

我最近在审查一些代码时遇到了一些令我感到困惑的事情。假设我有一个函数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?我很困惑你如何在初始化时将变量用作参数。

2 个答案:

答案 0 :(得分:3)

  

在传递给newNum之前是否初始化为0?

也许。这取决于背景。如果变量是全局静态,则在动态初始化之前初始化为零。

如果它是自动变量,则传递给getNewNumber的值是不确定的,并且使用该值具有未定义的行为。一个体面的编译器会警告你。

  

我很困惑如何在初始化时将变量用作参数。

如果变量未静态初始化,那么您不能以其定义行为的方式在其自己的初始化中使用其值。

如果变量在动态初始化之前初始化为零,那么您可以使用该值,但您也可以使用文字零,这对程序的读者来说更清楚。我认为在自己的初始化中使用变量的值没有任何有用的方法。

答案 1 :(得分:0)

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