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 文字数组初始化的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 char 文字初始化 char 数组?

通过文字将数组提供给c ++中的函数

在C ++中初始化一个指向结构的指针数组

为啥这种语法专门用于初始化字符串文字而不能用于字符数组? [复制]

字符数组的文字字符串初始值设定项

从字符串文字初始化char数组时会发生什么?