这个引用会无效吗?

Will this reference become invalid?

本文关键字:无效 引用      更新时间:2023-10-16

我正在努力理解参考。
因此,给定下面的程序…

void Foo(std::string& m)
{
    std::string f = "Foo Stack Content"; 
    m = f;
}
int main()
{
    std::string m = "Main Stack Content";
    Foo(m);
    std::cout << m << std::endl;
}

因为m在Foo中被赋值为f,而f是在Foo的堆栈上创建的,当Foo退出时,f和它指向的内存将不再有效。这是否意味着m现在也是无效的?

在c++ class中,操作符可以根据其定义(重载)的方式具有different含义。在您的情况下,m是参考,f是变量。表达式m = f是两个类对象之间的赋值(实际上引用不是对象,而是alias)。std::stringmf之间执行deep copy。这意味着将f的值复制到m。您还应该记住,指针和引用之间有一个根本的区别。指针是存储在内存中的真实变量。引用是alias,它们是相同的变量,但名称不同