2014-12-05 55 views
1

我試圖在託管C++中創建一個常量數組,並陷入困境。我已經四處搜尋,但還沒有遇到任何如何做到這一點的好例子。C++/Cli文字數組初始化

我想是等價的:

const unsigned char myConstArray = {1,2,3,4,5,6}; 

現在,我在這盯着:

literal array<Byte>^ myConstArray = gcnew array<Byte> { 1,2,3,4,5,6}; 

這我推測是不正確的,因爲Visual Studio中抱怨我不能在常量表達式中使用gcnew。不知道去哪裏,任何幫助將不勝感激。

乾杯,

大衛

回答

2

它不會與literal這樣的工作,因爲:

數據成員標記爲literal聲明時和值必須是一個必須初始化常量積分,枚舉或字符串類型。從初始化表達式類型到靜態常量數據成員類型的轉換不得要求用戶定義的轉換。

literal (C++ Component Extensions)

...但它是很奇怪的是,literalstatic const的等效但是通過使用static const能順利完成編譯。

創建只讀屬性是另一種方式,你可以返回數組:

ref class Test1 { 
public: 
    Test1() { 
     myArray = gcnew cli::array<Byte> { 1, 2, 3, 4, 5, 6}; 
    } 

    property cli::array<Byte>^ MyArray { 
     cli::array<Byte>^ get() { 
      return myArray; 
     }; 
    } 

private: 

    cli::array<Byte>^ myArray; 

}; 
+0

嗯..如果我將它改爲靜態常量,我反而會收到「不支持此類型的const/volatile限定符」的警告。它現在在編譯時已經超過了這一點。我想我可以製作一個普通的數組,使其成爲私人數據,並且希望如果沒有其他方式這樣做,它就不會被覆蓋。 – Fratink 2014-12-05 20:31:46

+0

你可以通過屬性返回它......查看我編輯的答案。 – t3chb0t 2014-12-05 20:37:07

+0

我沒有想到!謝謝! – Fratink 2014-12-05 20:38:45

0
std::initializer_list<unsigned char>>({1, 2, 3,4,5,6}; 

我不知道這是否適用於託管C++,但初始化列表是一個C++ 11的構建這是固有的const,並允許應用開始和結束語義,但不能進行數組索引。所以只要基於範圍的工作可以使用這個數組。

+0

請解釋一下這段代碼是什麼。現在,作爲答案並有被刪除的危險,它並不是非常有用。 – 2014-12-05 20:59:05