是默认参数中未定义的变量坏

Is an undefined variable in default argument bad?

本文关键字:变量 未定义 默认 参数      更新时间:2023-10-16

在C++中,将一个未定义的变量作为具有默认参数值的函数参数是否不好?

我相信这会导致未定义的行为,但我在一些预先存在的代码中看到了它,我没有看到任何警告被输出,我想确认我应该期待的行为

头文件-Header.h

#ifndef HEADER_H
#define HEADER_H
class aClass
{
    int someFunctionA(int aValue = 0);
    virtual int someFunctionB(int aValue = 0);
}
#endif

CPP文件-body.CPP

int aClass::someFunctionA(int aValue)
{
    if (aValue == 0)
    {
        return 0;
    }
    else
    {
        return 1;
    }
}
int aClass::someFunctionB(int aValue)
{
    if (aValue == 0)
    {
        return 0;
    }
    else
    {
        return 1;
    }
}
int main(int argc, char **argv, char **envp)
{
    int uninitializedInt;
    int initializedInt = 1;
    aClass example = new aClass();
    aClass.someFunctionA(); // Expecting this to return 0
    aClass.someFunctionB(); // Expecting this to return 0
    aClass.someFunctionA(uninitializedInt); // Expecting this to be undefined behaviour
    aClass.someFunctionB(uninitializedInt); // Expecting this to be undefined behaviour
    aClass.someFunctionA(initializedInt); // Expecting this to return 1
    aClass.someFunctionB(initializedInt); // Expecting this to return 1
}

我对代码注释的期望是否正确?

我对代码注释的期望是否正确?

是的
警告并不总是正确的,即错误的警告和丢失的警告是可能的,主要是因为停止问题(至少对于一些警告。是的,这种情况没有那么难,但仍然…)。