何时复制返回值

gra*_*olf 2 c++ visual-c++ c++11

我们假设我有以下代码:

int bar = 0;

struct Foo {
    ~Foo() { bar = 1; }
};

int main(int argc, char ** argv) {
    Foo f;
    return bar;
}
Run Code Online (Sandbox Code Playgroud)

什么是程序的回报价值?0还是1?

Ker*_* SB 12

来自[stmt.return]/3:

返回实体的副本初始化是在由return语句,这反过来,是当地的变量(6.6)的破坏之前测序的操作建立完整的表达年底临时工破坏之前测序封闭return语句的块.

因此析构函数在返回值初始化之后运行,并且在函数的第一次调用时返回值为0.