c – 参数功能的功能堆栈什么时候展开?

假设我有两个功能,一个像:

const char* getstr()
{
  std::string s = "somestring";
  return s.c_str();
}

第二个像:

void func(int x, const char* str)
{
    std::cout <<"x="<<x <<", str=" <<str<<std::endl;
}

现在假设’func()’有类似的东西

func(100,getstr());

我的问题是函数“getstr()”的函数堆栈何时被展开?
在执行“func()”的主体之后或在执行主体之前?

我问这个是因为我团队中的一些天才写了这种类型的“getstr()”函数.并且不知何故系统没有崩溃.

我的理解是,只要评估该参数,函数“getstr()”的堆栈就会被取消.但如果确实如此,那么代码就会崩溃而且不会发生.

有人可以帮助我c标准吗?

最佳答案 在gettr返回之前,s被销毁. gettr返回的指针是悬空的.

点赞