Как и следовало ожидать, компилятор (VisualStudio 2008) выдаст предупреждениеФункция с отсутствующим возвращаемым значением, поведением во время выполнения
предупреждение C4715: «doSomethingWith»: не все пути управлений возвращает значение
при компиляции следующего кода:
int doSomethingWith(int value)
{
int returnValue = 3;
bool condition = false;
if(condition)
// returnValue += value; // DOH
return returnValue;
}
int main(int argc, char* argv[])
{
int foo = 10;
int result = doSomethingWith(foo);
return 0;
}
Но программа работает просто отлично. Возвращаемое значение функции doSomethingWith() равно 0.
Это просто неопределенное поведение, или существует определенное правило, как создается или вычисляется значение результата во время выполнения. Что происходит с не-POD-типами данных как возвращаемое значение?
Посмотрите на этот ответ: http://stackoverflow.com/questions/1610030/why-can-you-return-from-a-non-void-function-without-returning-a-value- без-pro/1610454 # 1610454 –
@fnieto: Ах, я вижу, это очень хороший ответ. Не нашел его сам, прежде чем спрашивать ... – nabulke