В C++ неудобно иметь неопределенную переменную как аргумент функции, который имеет значение аргумента по умолчанию?Является ли неопределенная переменная в аргументе по умолчанию плохим?
Я считаю, что это приведет к непредсказуемому поведению, но я видел его в каком-то ранее существовавшем коде, и я не вижу никаких предупреждений быть выводимыми и хотел, чтобы подтвердить поведение следует ожидать
заголовка файла - заголовок .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
}
ли мои ожидания как в моих комментариях к коду правильно?
'Мои ожидания по моим кодовым комментариям верны?' Да (я думаю?). Почему они должны ошибаться? ... Предупреждения могут не работать, поэтому компьютеры не программируются. – deviantfan
@deviantfan У меня не было предупреждения, и я подумал, что это может быть какое-то поведение, о котором я не знал. Например, если вы передаете неинициализированную переменную, она автоматически установит значение по умолчанию – Puddler
. Ваш примерный код безнадежно сломан. Я ожидаю, что компилятор предупредит об использовании неинициализированной переменной, если вы установите уровни предупреждений достаточно высокими. – Praetorian