gpt4 book ai didi

c++ operator= const 引用的方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:57:46 24 4
gpt4 key购买 nike

我正在用这样的 const 引用编写类:

class B;

class foo {
const B& b;

foo(const B& newb): b(newb) { }

void operator=(const foo & foo2) {
// This does not work
foo.b = foo2.b;
}
};

我正在尝试定义一个有效的运算符 = 显然 = 不起作用,因为不允许我更改 const 引用。这有办法让引用指向另一个对象吗?

如果 b 不是 const,C++ 将为我提供一个有效的 operator=。如果我将一个成员定义为 const cl 将吐出:

警告 C4512:“foo”:无法生成赋值运算符

最佳答案

您要查找的术语是“重新绑定(bind)”。如“是否可以重新绑定(bind)引用?”答案是“不,引用被定义为不可重新绑定(bind)”。但是您可以使用指针并更改它指向的内容:

class B;

class foo {
B* b;

foo(const B& newb)
{
b = &newb;
}

void operator=(const foo& foo2)
{
b = &foo2.b;
}
};

但是,如果被赋值的对象比用于赋值的对象存在时间更长(顺便说一句,构造函数也有同样的问题),这就有悬空指针的风险。您很有可能根本不需要引用或指针:

class B;

class foo {
B b;

foo(const B& newb): b(newb) { }

void operator=(const foo& foo2)
{
b = foo2.b;
}
};

如果您确实需要指针/引用(也许 B 是一个基类),那么您将需要研究智能指针来处理对象生命周期问题。

关于c++ operator= const 引用的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3408804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com