C++ cli 无法分配给initonly数组的元素?

C++ cli 无法分配给initonly数组的元素?,c++-cli,C++ Cli,人们似乎普遍认为C++/CLI的initonly相当于C#的readonly关键字。但是,以下方面: ref class C { C(); void Method(); initonly array<int>^ m_array; }; C::C() { m_array = gcnew array<int>(10); } void C::Method() { m_array[0] = 5; // Fails with C3893

人们似乎普遍认为C++/CLI的
initonly
相当于C#的
readonly
关键字。但是,以下方面:

ref class C { 
    C();
    void Method();
    initonly array<int>^ m_array;
};

C::C() {
    m_array = gcnew array<int>(10);
}

void C::Method() {
    m_array[0] = 5; // Fails with C3893
}
顺便说一句,它编译得很好,并且做同样的事情

这是在C++/CLI中安装的还是设计上的?顺便问一下,与使用访问器相比,使用
Array::SetValue


报告了一个类似(但不完全相同)的案例,显然是作为VS2008的bug提交的:。我正在使用Visual Studio 2012。

是的,这是一个bug。它强制执行的东西不是.NET类型系统暗示的,强制执行是无效的

但是不要使用
Array::SetValue
,因为这涉及到装箱,并且不是类型安全的。您只需执行以下操作:

auto array = m_array; // another handle to same array
array[0] = 5;
auto array = m_array; // another handle to same array
array[0] = 5;