【问题标题】:Stating constant arrays value in C++在 C++ 中声明常量数组值
【发布时间】:2011-04-07 13:44:26
【问题描述】:

例如我有:

int boo[8];
boo[1] = boo[3] = boo[7] = 4;
boo[0] = boo[2] = 7;
boo[4] = boo[5] = boo[6] = 15;

我应该如何将其键入为常量值?我看到了类似的问题,但对我没有帮助。

编辑: 还有一个问题,如果 boo 索引为 0 1 3 4 5 6 7 是常量但 boo[2] 不是?有可能吗?

【问题讨论】:

  • 如果“常量值”是指初始化列表,则不能。但是一些编译器提供了有趣的扩展。看看这个问题stackoverflow.com/questions/201101/…
  • 你的意思是你想要 const int boo[8] 吗?

标签: c++ arrays constants


【解决方案1】:

这是你要找的吗?

const int boo[] = { 7, 4, 7, 4, 15, 15, 15, 4 };

获取指向数组中一个条目的非常量指针,如下所示:

int * foo = (int*)&boo[2];

【讨论】:

  • 是的,还有一个问题,如果 boo 索引为 0 1 3 4 5 6 7 是常量但 boo[2] 不是?
  • 也许你可以通过不同的指针访问它: int const* boo2 = boo+2;在 *boo2 = 5; 之后
  • 我已经修改了答案以包含一个获取可用于修改一个条目的指针的示例。
【解决方案2】:

一个不太优雅的解决方案可能是:

const int boo[8] = {7,4,7,4,15,15,15,4};

另一种解决方案可能是:

int boo_[8];
boo_[1] = boo_[3] = boo_[7] = 4;
boo_[0] = boo_[2] = 7;
boo_[4] = boo_[5] = boo_[6] = 15;
const int * boo = boo_;

【讨论】:

  • 不,我觉得这很优雅:)
  • 使用boo_ 而不是_boo。以下划线或双下划线开头的名称保留供实现(编译器)使用。这里有一些规则,但最好避免在开头使用下划线。
猜你喜欢
  • 1970-01-01
  • 2011-01-27
  • 2019-02-23
  • 2010-09-25
  • 2012-10-19
  • 1970-01-01
相关资源
最近更新 更多