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

Initializing a variable with a function that takes that variable as an argument

本文关键字:变量 参数 函数 初始化      更新时间:2023-10-16

我最近正在审查一些代码,我遇到了一些我感到困惑的东西。说我有一个函数, 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);

在传入纽纳姆之前,它是初始化为0吗?我对如何将变量用作参数进行初始化时感到困惑。

在传入newnum之前,它是初始化为0吗?

也许。这取决于上下文。如果变量是全局静态,则在动态初始化之前初始初始化。

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

我对如何在初始化变量时将其用作参数感到困惑。

如果该变量未静态初始化,则您不能以其自身的初始化的方式使用它的定义行为。

如果变量在动态初始化之前初始初始化为零,则可以使用该值,但是您最好使用字面的零,并且对于程序的读者来说,这将更清楚。我认为没有任何有用的方法可以在其自身的初始化中使用变量的值。

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