gpt4 book ai didi

c++ - 如何使用复制构造函数复制常量变量?

转载 作者:行者123 更新时间:2023-11-28 07:18:12 25 4
gpt4 key购买 nike

我的类有以下私有(private)变量,包括一个 const static 变量,如您所见:

private:
// class constant for # of bits in an unsigned short int:
const static int _USI_BITS = sizeof(usi)*CHAR_BIT;
usi* _booArr;
int _booArrLen;
int _numBoos;

我刚开始使用复制构造函数,但不知道如何编写。这是我的尝试:

BitPack::BitPack(const BitPack& other) { 
_USI_BITS = other._USI_BITS;
_booArr = new usi[other._booArrLen];
for (int i = 0; i < _booArrLen; ++i)
_booArr[i] = other._booArr[i];
_booArrLen = other._booArrLen;
_numBoos = other.numBoos;
}

编译器说:

错误:分配只读变量“BitPack::_USI_BITS”

请纠正我的愚蠢行为。

最佳答案

构造函数,包括复制构造函数,需要设置实例成员,即那些不是static 的成员。静态成员由所有实例共享,因此必须在任何构造函数之外进行初始化。

在你的情况下,你需要删除

_USI_BITS = other._USI_BITS;

行:两侧引用同一个static成员,所以赋值没有效果。

您的复制构造函数的其余部分没问题。请注意,由于您的复制构造函数分配资源,rule of three建议您应该添加自定义赋值运算符和自定义析构函数:

BitPack& operator=(const BitPack& other) {
...
}
~BitPack() {
...
}

关于c++ - 如何使用复制构造函数复制常量变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19898024/

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