В С++ плохо ли иметь неопределенную переменную в качестве аргумента функции, которая имеет значение аргумента по умолчанию?
Я считаю, что это приведет к неопределенному поведению, но я видел это в каком-то ранее существовавшем коде, и я не вижу никаких выводимых предупреждений и хотел подтвердить поведение, которого я должен ожидать.
Заголовочный файл — 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?
Да (думаю?). Почему они должны ошибаться? ... Предупреждения могут не сработать, вот почему компьютеры не программируют. - person deviantfan   schedule 12.01.2016