<分区>
我是 c++ 的新手,想知道是否有一种方法可以在函数中创建一个对象,然后返回该对象而不必将其复制到内存中。 我知道原始本地对象超出范围,但我希望编译器能够以对象拷贝重用相同内存地址的方式对其进行优化。
int foo()
{
int bar = 5;
std::cout << &bar << std::endl;
return bar;
}
int main()
{
char a;
auto b = foo();
std::cout << &b << std::endl;
std::cin >> a;
return 0;
}
这会返回不同的内存地址。由于不再需要 bar 的地址并且 b 总是相同的大小,有什么理由不能只使用相同的地址并省去复制的步骤?
对于一个简单的整数来说并不重要,但对于更大的对象来说,确保返回的对象不会被复制到内存中的首选方法是什么?
以下会是一个好的方法吗?
int & foo(int & bar)
{
std::cout << &bar << std::endl;
// do things with bar
return bar;
}
int main()
{
char a;
auto bar = 5;
auto & b = foo(bar);
std::cout << &b << std::endl;
std::cin >> a;
return 0;
}
作为附带问题,为什么下面的事情会起作用:
int & foo()
{
int bar = 5;
std::cout << &bar << std::endl;
return bar;
}
int main()
{
char a;
auto & b = foo();
std::cout << &b << " " << b << std::endl;
std::cin >> a;
return 0;
}
我预计 bar 超出范围并且不能再被引用,但这会编译并返回正确的值 (MSVC++ 2013)。