我想了解参考文献 所以给出以下程序......
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现在也无效?
答案 0 :(得分:2)
在c ++ class
中,运算符可以具有different
含义,具体取决于它们的定义方式(重载)。在您的情况下,m
是引用,f
是可变的。表达式m = f
是两个类对象之间的赋值(井引用不是对象,而是alias
)。 std::string
在deep copy
和m
之间执行f
。这意味着f
的值会复制到m
。您还应该记住,指针和引用之间存在根本区别。指针是存储在内存中的实数变量。引用是alias
,它们是具有不同名称的相同变量