如果我在一个类中读取这个作为数据成员,那么static
是指整个表达式(数组本身)还是数组的元素?
static const int* array[100];
数组array
是静态的,还是数组包含100 static const int pointers
?
我假设前者,但单词const
改变含义的方式让我想知道static
是否也会根据表达式存在的位置改变含义。在上面,指针array
不是const
但是数组的元素是 const
,所以我想知道数组的指针是否是{{ 1}}。
答案 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)
static
,extern
和register
适用于您声明的变量,在此示例中适用于array
。
因此,你得到一个100个指向常数整数的静态数组。