Пусть ниже код,Занимает ли iostream пространство стека?
int* foo(){
int a=5;
return &a;
}
int main(){
int* b=foo();
std::cout<<*b<<std::endl;
return 0;
}
Мое понимание этой программы заключается в том, что время жизни только в обув. По завершении foo() значение не должно быть действительным. Но поскольку никакая функция не перезаписывает этот кусок стека, он все равно печатает 5. Пожалуйста, исправьте меня, если это не так.
Если вышесказанное верно, мой вопрос в том, что я вызвал std :: cout < <, выходной поток; Я на самом деле что-то назвал, займет ли место в стеке? Или как это работает в памяти. Большое спасибо!!
Ваш вопрос касается 'a', а не' iostream.' – EJP
Компилятор, возможно, даже не хочет возвращать '& a', так как это непривычно. Это может показаться противоречивым. В конце концов, вы его записали. Но многие компиляторы C++ _optimize_ результирующие двоичные файлы, удаляя утверждения, которые не вносят вклад в правильный результат. Такие оптимизаторы не являются волшебными, им нужны правила для определения того, какие утверждения безопасны для удаления. И эти правила могут иметь довольно неожиданные результаты в таких сломанных программах. – MSalters