Пропуск возврата значения из функции, к сожалению, не является ошибкой компиляции.
Компилятор может выдавать диагностическое сообщение (например, g ++ делает при компиляции с опцией -Wall
)но это не обязательно.
Пропуск возврата значения - это то, что авторы компилятора могут предполагать, что программист никогда этого не сделает, и если программа делает это, стандарт говорит, что компилятор может игнорировать проблему ичто бы ни случилось (неопределенное поведение).Это всегда ошибка программиста.
В архитектуре x86 обычно чистый эффект состоит в том, что вы получите какое-то странное значение, если функция возвращает истинный "родной" тип (например, char
или int
), который помещается в регистр, и вы можете вместо этого получить повреждение памяти или сбой, если функция, например, возвращает экземпляр класса (например, std::string
).Тем не менее, обратите внимание, что любые предположения о том, что происходит в случае неопределенного поведения, это просто ... то есть чистые предположения, поскольку все, что может произойти для спецификации языка C ++.