c++ - 参数函数的函数栈什么时候展开?

标签 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++ 标准是怎么说的?

最佳答案

sgetstr 返回之前被销毁。 getstr 返回的指针悬空。

关于c++ - 参数函数的函数栈什么时候展开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34781094/

相关文章:

c++ - 内存泄漏会发生什么?

c++ - 预编译 header 在使用 Qt Creator/qmake/MinGw 的调试版本中不起作用

C++ 内联模板策略函数

c++ - 这个模板有什么问题

c++ - 如果您所做的只是等待它完成,为什么要使用异步?

c++ - MySQL PreparedStatement 注意事项

c++ - 如何修复 R6031 - 尝试多次初始化 CRT。这表明您的应用程序中存在错误?

C++ 编码数据库元数据信息的最佳模式

c++ - 以下 C++ 代码用于 -> "#define idiv(a, b) (((a) + (b)/2)/(b))"是什么?

c++ - 将 Mat 转换为关键点?