上面的代码可以编译,但我不确定逻辑是否正确。
你看,行*bb_ = bb;
只有填充数组的第一个元素。当你将一个指针引用到一个数组时,你会得到它的第一个元素(在索引0处)。
你想要做的是填补了整个阵列,而不只是第一个元素:
const int SIZE = 10; // please use constants for array sizes
class a {
public :
a(const b (&bb)[SIZE]) ;
private :
b bb_[SIZE];
};
a::a(const b (&bb) [SIZE]) {
for (int i = 0; i < SIZE; i++)
bb_[i] = bb[i];
}
如果你不喜欢在构造函数中的循环,你可以使用memcpy()
功能会从字面上bb
复制字节的内存到您的数组:
a::a(b (&bb) [SIZE]) {
memcpy(bb, bb_, sizeof(bb));
}
另一种方法是使用更安全的替代方法:std::array
:
#include <array>
const int SIZE = 10;
class a {
public :
a(std::array<b, SIZE> bb);
private :
std::array<b, SIZE> bb_;
};
a::a(std::array<b, SIZE> bb) {
bb_ = bb;
}
哪个特定部分不清楚?为了回答这个问题,我们必须知道哪一部分你不明白。 –
你在这里做什么:传递一个参数(引用)的单个对象,然后将一个ob对象拷贝到bb_ [0](除非b有一个非拷贝拷贝构造函数)。阵列中的其他9个位置仍未使用。 – deviantfan
这里没有初始化。 –