为什么我不能声明一个const数组? (不是consts数组,而是数组,其元素和大小不能更改)

时间:2014-08-22 19:21:00

标签: c++ arrays const

#upd: 请参阅"#UPDATED_2"首先在下面。

我无法做到。无论我在下面的代码中放置const关键字,我都无法获得所需的结果:

int arrayOfInts[5] = {1,2,3,4,5};

上面代码的下两个变体给出了一系列的consts:

const int arrayOfInts[5] = {1,2,3,4,5};
int const arrayOfInts[5] = {1,2,3,4,5};

但是我要声明一个 const数组,其元素和&尺寸无法改变。

此代码中const关键字的任何其他位置都不能满足编译器。

#UPDATED:抱歉!当然我写了一个关于数组大小的愚蠢。当然它无法改变。所以我需要一个数组,其元素不能改变。我的意思是,没有人可以做类似的事情:

arrayOfInts[4] = 10;

#UPDATED_2:我很抱歉!显然,我过热了。整个我的问题都是愚蠢的!圆锥阵列的元素无法改变! 我被这个事实误导了

std::array<Type1, arrayOfInts[4]> a;

没有编译。出于某种原因,我决定,因为arrayOfInts [4]不是常数,但它并非如此。这是因为运营商&#34; []&#34;不允许在模板参数表达式中使用。 请原谅我你的失去的时间。

2 个答案:

答案 0 :(得分:3)

你是否有

int arrayOfInts[5] = {1,2,3,4,5};

const int arrayOfInts[5] = {1,2,3,4,5};

您无法更改数组的大小。两种形式的大小都是常数。

在第一个中,您可以更改数组的元素。在第二个中,您无法更改数组的元素。

第二个声明为您提供所需的信息。

答案 1 :(得分:1)

当您说const T x = /* some value */;或等同于T const x = /* ... */;时,您创建一个常量,不可变对象x。不需要任何其他东西来使它变得更加不可变。

那已经完全符合您的情况了。在您的情况下,T = int[5]。 (是的,数组类型类型。大小是类型的一部分。)