2012-11-29 39 views
0

我已经知道const预选赛只影响一个对象,但不是它的类型:const可以应用于类型吗?

例如:

// Only the elements of an array are constant not the array itself 
const int a[5]; 

假设,如果我有:

float *const p1; // 1 
float const *p2; // 2 

在第一种情况下上面,这是否意味着指针类型是恒定的,而不是对象p1?当这些类型不合格时,这怎么可能呢?

+1

“*我知道'const'限定符只影响一个对象,但不是它的类型*” - 这是错误的。 – melpomene

+0

@melpomene:例如?说const只影响一个数组对象而不是它的类型是不正确的? – user963241

+0

这确实是不正确的。 – melpomene

回答

2
float *const p1; // 1 

意味着指针p1是恒定的,它不能(而不应该)指向另一个地址。
这是不是指针类型是恒定的,但这种类型的实例是p1是contant。

使用Clockwise spiral rule更好地理解这一点。

这种情况怎么会发生,当这些类型不允许合格时?

这是不正确的。事实上,限定符是类型限定符(§6.7.3)

+0

由于指针是派生类型。这个陈述似乎与这里有关吗? _“(§6.2.5/26)派生类型不符合派生类型的限定符(如果有)。”_ – user963241

1

采用这种声明的简写形式:

const int a[5]; 

一个的类型是“5个常量整数数组”。

采用这种声明

float *const p1; 

P1具有输入 “常量指针浮动”。

采用这种声明

const float *p2; 

P2具有输入 “指针为const浮动”。

无法将数组声明为const,但无论如何不能改变数组。只有数组中的元素才能被更改。

相关问题