此功能是否保证内联扩展

Dav*_*rey 0 c c++ stack inline

我在工作中经历了一些代码,我发现了这一点

inline
  FLAGS get_flags(void) {
  FLAGS res;
  memset(&res, 0, sizeof(res));
  return res
}
Run Code Online (Sandbox Code Playgroud)

这是在程序中包含的头文件中声明的.我意识到,如果没有内联,因为这是在堆栈上分配的,这将是一件非常糟糕的事情.我们从未遇到过相关代码的问题,但我对此感到好奇.

Jam*_*lis 6

不,不保证内联扩展. inline仅仅是对编译器的暗示.

也就是说,虽然res确实存在于堆栈中,但您会返回它的副本.如果不进行内联扩展,那将不是"非常糟糕的事情".