默认参数中的未定义变量不好吗?
Is an undefined variable in default argument bad?
在 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
}
根据我的代码注释,我的期望是否正确?
Are my expectations as per my code comments correct?
是的。
不能保证警告总是正确的,即。错误的警告和丢失的警告是可能的,主要是因为停止问题(至少对于某些警告。是的,这种情况并不难,但仍然......)。
在 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
}
根据我的代码注释,我的期望是否正确?
Are my expectations as per my code comments correct?
是的。
不能保证警告总是正确的,即。错误的警告和丢失的警告是可能的,主要是因为停止问题(至少对于某些警告。是的,这种情况并不难,但仍然......)。