C ++ / Cli文字数组初始化

时间:2014-12-05 20:15:28

标签: c++-cli

我正在尝试在托管c ++中创建一个常量数组,但我遇到了问题。我已经四处寻找,但没有遇到过如何做到这一点的好例子。

我想要的是相当于:

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 个答案:

答案 0 :(得分:2)

它不适用于literal,因为:

  

标记为literal的数据成员必须在声明时初始化,该值必须是常量整数,枚举或字符串类型。从初始化表达式的类型到静态const数据成员的类型的转换不得要求用户定义的转换。

literal (C++ Component Extensions)

...然而,literal相当于static 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;

};

答案 1 :(得分:0)

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

我不确定这是否适用于托管C ++,但初始化列表是一个C ++ 11结构,它本身就是const,允许应用开始和结束语义,但不允许应用数组索引。所以只要一个基于范围的工作就可以使用这个数组。