【发布时间】:2020-11-27 20:26:55
【问题描述】:
我想了解我是否可以安全地返回作为参数传递给函数的右值引用,并且它不会随着堆栈展开而被破坏。
struct Struct { int m; };
Struct& f(Struct&& rvalue)
{
std::cout << &rvalue << '\n';
return rvalue;
}
void main()
{
Struct& lvalue1 = f(Struct{ 1 });
std::cout << &lvalue1 << '\n';
Struct& lvalue2 = f(Struct{ 2 });
std::cout << &lvalue2 << '\n';
std::cin.get();
}
输出:
00A3F844
00A3F844
00A3F838
00A3F838
此代码为右值生成不同的地址。这是否意味着 Struct 对象的实际构造发生在函数调用之前,我可以安全地做这种事情?
【问题讨论】:
-
请注意,在 C++ 中,
main函数的返回类型必须为int。 -
@François Andrieux 这是标准吗?据我所知,Windows 不使用 main 的返回值。
-
It is required by the standard。平台可以提供额外的重载,但即使是那些需要返回类型
int。 -
很高兴知道。感谢您的链接。
标签: c++ function reference stack rvalue