gpt4 book ai didi

C++ const 引用 vector(或其他动态容器)中的类变量

转载 作者:行者123 更新时间:2023-11-30 03:00:17 29 4
gpt4 key购买 nike

这里是非常具体的问题!

我有一个类保存有关行星的数据。例如,它有一个 vector (double x, double y, double z) 来保存它的位置,还有一个 double 变量来保存它的半径。

我经常使用引用来获得对私有(private)变量的“只读公共(public)访问”。我调用一个 setter 方法来更改私有(private)变量。

但是,我认为在 vector 或列表等动态容器内不允许这样做。

我试过“constant constant”指针,想法一旦在初始化列表中初始化,它们将无法指向其他任何东西或修改变量。但是在编译时出现同样的错误信息。

消息是这样的:“错误:非静态常量成员 const double* const x,不能使用默认赋值运算符”

所以,当我对 vector 执行“push_back”时,复制类时出现问题 - 对吗?

这是一个示例代码:

class planet{

private:

double _radius;

public:

// Constructor
planet() : rad(_radius){
_radius = 0.0f;
}

// This is a setter method - works fine
void setrad(double new_rad){
_radius = rad;
}

// This is a better solution to the getter method
// - does not seem to work with dynamic containers!
const double& rad; // This is initialized in the constructor list
};

int main(...){

...

std::vector<planet> the_planets;
planet next_planet_to_push;
next_planet_to_push.setrad(1.0f);

// This causes the error!
the_planets.push_back(next_planet_to_add);

...

}

最佳答案

您需要为包含成员引用或 const 成员(在您的情况下,两者)的类提供自己的复制构造函数和赋值运算符。

编译器生成的将尝试进行浅拷贝,这在这种情况下是不可能的。

关于C++ const 引用 vector(或其他动态容器)中的类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12245661/

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