根据C++ 14 [expr.call]/4:
参数的生命周期在定义它的函数返回时结束.
这似乎意味着参数的析构函数必须在调用函数的代码继续使用函数的返回值之前运行.
但是,此代码显示不同:
#include <iostream>
struct G
{
G(int): moved(0) { std::cout << "G(int)\n"; }
G(G&&): moved(1) { std::cout << "G(G&&)\n"; }
~G() { std::cout << (moved ? "~G(G&&)\n" : "~G()\n"); }
int moved;
};
struct F
{
F(int) { std::cout << "F(int)\n"; }
~F() { std::cout << "~F()\n"; }
};
int func(G gparm)
{
std::cout << "---- In func.\n";
return 0;
}
int main()
{
F v { func(0) };
std::cout << "---- End of main.\n"; …Run Code Online (Sandbox Code Playgroud)