C++/Cli 文字数组初始化
Posted
技术标签:
【中文标题】C++/Cli 文字数组初始化【英文标题】:C++/Cli literal Array Initialization 【发布时间】:2014-12-05 20:15:27 【问题描述】:我正在尝试在托管 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。不知道去哪里,任何帮助将不胜感激。
干杯,
大卫
【问题讨论】:
【参考方案1】:它不适用于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;
;
【讨论】:
Hmm.. 如果我将其更改为 static const,我会收到“不支持此类型的 const/volatile 限定符”的警告。它现在在编译中确实超过了这一点。我想我可以创建一个常规数组,将其设为私有,并希望如果没有其他方法,它不会被覆盖。 我没想到!谢谢! 工作得很好,它实际上简化了一些事情。再次感谢!【参考方案2】:std::initializer_list<unsigned char>>(1, 2, 3,4,5,6;
我不确定这是否适用于托管 C++,但初始化列表是 C++11 构造,它本质上是 const 并允许应用开始和结束语义,但不允许应用数组索引。所以只要基于范围的 for 可以工作,你就可以使用这个数组。
【讨论】:
请解释一下这段代码是什么。目前,它作为答案不是很有用,并且有被删除的危险。以上是关于C++/Cli 文字数组初始化的主要内容,如果未能解决你的问题,请参考以下文章