亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在構造函數初始值設定項中初始化成員數組

在構造函數初始值設定項中初始化成員數組

C++
四季花海 2019-11-30 13:07:09
class C {public: C() : arr({1,2,3}) //doesn't compile{}    /*    C() : arr{1,2,3} //doesn't compile either{}    */private: int arr[3];};我相信原因是只能使用=語法來初始化數組,即:int arr[3] = {1,3,4};問題我該怎么做我想做的事情(即在構造函數中初始化一個數組(不在主體中分配元素))??赡軉酑 ++ 03標準是否對在ctor初始化程序中初始化聚合(包括數組)有什么特別的建議?還是上述代碼的無效是其他一些規則的必然結果?C ++ 0x初始化程序列表可以解決問題嗎?PS:請不要提及向量,boost :: arrays及其對數組的優越性,我很清楚。
查看完整描述

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 */

};


查看完整回答
反對 回復 2019-11-30
?
守候你守候我

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}};


查看完整回答
反對 回復 2019-11-30
?
慕容森

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()) {}

};


查看完整回答
反對 回復 2019-11-30
  • 3 回答
  • 0 關注
  • 849 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號