【发布时间】:2014-11-26 07:59:16
【问题描述】:
我正在尝试创建一个指向常量对象的非常量指针的非常量数组。这个想法是我应该能够更改数组中的指针指向的内容,但它们指向的是一个常量对象。
我在定义这个数组时遇到了问题(它是一个指向 Person 类型对象的指针数组 - 一个自定义类)。我目前正在像这样声明数组:
Person* people[10];
这也不是明确的说指针指向 const Persons。所以当我做这样的事情时:
people[i] = &p;
其中p 是对const Person 类型对象的引用,它失败了。
【问题讨论】:
-
const Person *people[10] -
@NeilKirk,这不会使数组本身成为常量吗?还是指针常量?似乎有三种不同的方式来声明它,具体取决于您想要 const 的哪一部分。
-
@user83643:只有两种不同的方式,因为 const 数组与 const 元素数组是一样的。指向可变
Person的 const 指针数组将是Person* const people[10];。 -
const Person *不能改变人,但可以指向其他人。Person *const可以换人,但不能指向其他人。我觉得我可以在这里开个玩笑,但我躲开了一个玩笑。将指针放入数组不会更改指针的该属性。const Person *==Person const * -
@kotlomoy:是和不是。 3.9.3/2:“应用于数组类型的任何 cv 限定符都会影响数组元素类型,而不是数组类型。”但是 3.9.3/5:“应用于数组类型的 Cv 限定符附加到底层元素类型,因此符号“cv
T”,其中T是一个数组类型,指到其元素如此限定的数组。其元素为 cv 限定的数组类型也被认为具有与其元素相同的 cv 限定。"
标签: c++ arrays pointers constants