在下面的示例中,我想通过函数 foo 和 bar 移动“a”。为什么bar函数中“pp”的地址会发生变化?我不明白为什么。我期待它与 foo 中的“tt”相同,这与 main 中的“a”相同。
#include <iostream>
#include <utility>
struct A
{
int a_;
};
template<typename T>
A foo(T &&t)
{
auto &&tt = std::move(t);
tt.a_ -= 3;
std::cout << "tt=" << tt.a_ << "\t&tt=" << &tt << "\n";
return tt;
}
template<typename T>
A bar(T &&p)
{
auto &&pp = std::move(p);
pp.a_++;
std::cout << "pp=" << pp.a_ << "\t&pp=" << &pp << "\n";
return pp;
}
int main()
{
A a;
a.a_ = 12;
std::cout << "a=" << a.a_ << "\t&a=" << &a << "\n";
foo(std::move(a));
std::cout << "a=" << a.a_ << "\t&a=" << &a << "\n";
std::cout << "function chain=" << bar(std::move(foo(std::move(a)))).a_ << "\n";
std::cout << "a=" << a.a_ << "\t&a=" << &a << "\n";
return 0;
}