上面的代碼可以編譯,但我不確定邏輯是否正確。
你看,行*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
這裏沒有初始化。 –