【问题标题】:C++ making an array of pointers to const objectsC++ 创建一个指向 const 对象的指针数组
【发布时间】: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


【解决方案1】:

当有疑问时......使用 typedef(因为它是明确的,添加了更专业的语义并完全避免了混淆):

typedef const Person* PersonCPtr;
PersonCPtr people[10];

【讨论】:

  • 我宁愿不要怀疑!
  • @NeilKirk,我知道(我也知道)。我仍然认为使用 typedef 是一个好主意,因为当声明看起来丑陋/冗长/复杂时,它需要努力去理解(这对于将来查看代码的其他开发人员来说可能也是如此)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多