3 回答

TA貢獻1806條經驗 獲得超8個贊
我該怎么做我想做的事情(即在構造函數中初始化一個數組(不在主體中分配元素))。可能嗎?
是。它使用包含數組的結構。您說您已經知道這一點,但是我不明白這個問題。這樣,您確實可以在構造函數中初始化數組,而無需在主體中進行賦值。這是做什么的boost::array。
C ++ 03標準是否對在ctor初始化程序中初始化聚合(包括數組)有什么特別的建議?還是上述代碼的無效是其他一些規則的必然結果?
內存初始化器使用直接初始化。并且第8條的規則禁止這種事情。我不確定以下情況,但某些編譯器確實允許這種情況。
struct A {
char foo[6];
A():foo("hello") { } /* valid? */
};
有關更多詳細信息,請參見此GCC PR。
C ++ 0x初始化程序列表可以解決問題嗎?
是的,他們有。但是,我認為您的語法無效。您必須直接使用花括號來啟動列表初始化
struct A {
int foo[3];
A():foo{1, 2, 3} { }
A():foo({1, 2, 3}) { } /* invalid */
};

TA貢獻1802條經驗 獲得超10個贊
除了將數組歸零(或為非POD元素,值初始化)外,C ++ 98不提供任何直接語法。為此,您只需編寫C(): arr() {}。
我對Roger Pate所說的C ++ 0x聚合初始化的局限性說錯了,但是我懶得查找或檢查它,這沒關系,對嗎?編輯:羅杰(Roger)在談論“ C ++ 03”,我誤讀為“ C ++ 0x”。抱歉,羅杰。?
當前代碼的C ++ 98解決方法是將數組包裝在中struct,然后從該類型的靜態常量對其進行初始化。無論如何,數據都必須駐留在某個地方。袖套看起來像這樣:
class C
{
public:
C() : arr( arrData ) {}
private:
struct Arr{ int elem[3]; };
Arr arr;
static Arr const arrData;
};
C::Arr const C::arrData = {{1, 2, 3}};

TA貢獻1853條經驗 獲得超18個贊
解決方法:
template<class T, size_t N>
struct simple_array { // like std::array in C++0x
T arr[N];
};
class C : private simple_array<int, 3>
{
static simple_array<int, 3> myarr() {
simple_array<int, 3> arr = {1,2,3};
return arr;
}
public:
C() : simple_array<int, 3>(myarr()) {}
};
- 3 回答
- 0 關注
- 849 瀏覽
添加回答
舉報