静态const数组

时间:2013-01-20 07:22:51

标签: c++

如果我在一个类中读取这个作为数据成员,那么static是指整个表达式(数组本身)还是数组的元素?

static const int* array[100];

数组array是静态的,还是数组包含100 static const int pointers

我假设前者,但单词const改变含义的方式让我想知道static是否也会根据表达式存在的位置改变含义。在上面,指针array不是const但是数组的元素是 const,所以我想知道数组的指针是否是{{ 1}}。

2 个答案:

答案 0 :(得分:4)

C ++ 11 7.1.1存储类说明符:
§5

  

静态说明符只能应用于变量和函数的名称以及匿名联合(9.5)。   块内不能有静态函数声明,也不能有任何静态函数参数。 静止   变量声明中使用的说明符声明变量具有静态存储持续时间(3.7.1),   除非伴随thread_local说明符,它声明变量具有线程存储   持续时间(3.7.2)。静态说明符可用于类成员的声明; 9.4描述了它的效果。   有关使用静态说明符声明的名称的链接,请参见3.5。

那么您在代码示例中声明了什么?

static const int* array[100];

显然,您要声明变量array因此static适用于array
不要将存储类说明符 cv-qualifiers 混淆,前者适用于声明的变量,而后者适用于类型

答案 1 :(得分:2)

staticexternregister适用于您声明的变量,在此示例中适用于array

因此,你得到一个100个指向常数整数的静态数组。