这个引用会变得无效吗?

时间:2016-08-27 07:40:41

标签: c++ reference lifetime

我想了解参考文献 所以给出以下程序......

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,并且在Foo中的堆栈上创建了f,所以当Foo退出时,f和它指向的内存将不再有效。这是否意味着m现在也无效?

1 个答案:

答案 0 :(得分:2)

在c ++ class中,运算符可以具有different含义,具体取决于它们的定义方式(重载)。在您的情况下,m是引用,f是可变的。表达式m = f是两个类对象之间的赋值(井引用不是对象,而是alias)。 std::stringdeep copym之间执行f。这意味着f的值会复制到m。您还应该记住,指针和引用之间存在根本区别。指针是存储在内存中的实数变量。引用是alias,它们是具有不同名称的相同变量