iostream 是否占用堆栈空间



假设下面的代码,

int* foo(){
  int a=5;
  return &a;
}
int main(){
  int* b=foo();
  std::cout<<*b<<std::endl;
  return 0;
}

我对这个程序的理解是,一个的寿命只在foo中。foo() 完成后,a 应该无效。但由于没有函数覆盖该堆栈块,它仍然打印 5。如果这是错误的,请纠正我。

如果以上是正确的,我的问题是,我调用了 std::cout<<,输出流;我居然叫了什么,它会在堆栈上占用一些空间吗?或者它在内存中究竟是如何工作的。谢谢!!

"但是因为没有函数覆盖该堆栈块"。你不确定:C++标准中没有任何内容表明这一点。我可以构建一个符合标准的编译器来覆盖堆栈的该块。也许我对std::cout的实现会做到这一点。

从形式上讲,程序的行为是未定义的。你不能再说了。

相关内容

  • 没有找到相关文章

最新更新