这个引用会无效吗?
Will this reference become invalid?
我正在努力理解参考。
因此,给定下面的程序…
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::string
在m
和f
之间执行deep copy
。这意味着将f
的值复制到m
。您还应该记住,指针和引用之间有一个根本的区别。指针是存储在内存中的真实变量。引用是alias
,它们是相同的变量,但名称不同
相关文章:
- C++-模板嵌套类的引用初始化无效
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- 从 BubbleSort* 类型的右值初始化 'AssortedSorter&' 类型的非常量引用无效"
- 为什么在引用指针时将 const 放在 & 符号的左侧有效,而在右侧则无效?
- 为什么通过 vector<reference_wrapper> 的元素删除引用的值<T>不会使向量无效?
- 具有引用返回类型的重写方法上的协变返回类型无效
- 为什么我总是收到此错误:从类型为"农场动物"的右值初始化类型的非常量引用无效|
- 对全局变量的非常量引用的初始化无效
- 为什么右值不能绑定到非常量左值引用,除了写入临时无效的事实?
- 对类型为 std::_Bit_rerefence& 的非常量引用的初始化无效
- 模板流运算符重载错误:引用初始化无效,与basic_istream和basic_ifstream之间的差异有关
- 成本字符*类型的非常量引用的无效初始化,并且来自常量字符*类型的临时引用
- 对唯一 ptr 无效读取的引用向量
- 中毒的无效引用和短路表达评估错误或UB
- 返回无效引用
- 在基于范围的 for 循环中获取无效引用
- 通过重新解释强制转换创建无效引用
- 子弹物理由于无效引用而崩溃
- 对多态对象成员的无效引用
- 基于jobobject调用Java方法失败(无效引用?)