我正在尝试在托管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。不知道该去哪里,任何帮助都将不胜感激。
干杯,
大卫
答案 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,允许应用开始和结束语义,但不允许应用数组索引。所以只要一个基于范围的工作就可以使用这个数组。