【问题标题】:C++ Declare array whose size value from const arrayC++ 从 const 数组中声明其大小值的数组
【发布时间】:2013-09-24 14:52:09
【问题描述】:

我正在尝试定义一个堆栈 c 样式数组,其大小取自 const 数组并且在编译时是已知的。

const int size[2]={100, 100};
int ar[size[0]]; //error: expression must have a constant value

失败了。怎么解决?

【问题讨论】:

  • 它适用于 g++4.4。它也适用于ideone
  • 如果您在编译时知道大小,您可以始终将其作为数组大小粘贴
  • @cpp:那是因为 GCC 支持 C 风格的可变长度数组作为非标准扩展。

标签: c++ arrays constants constexpr compile-time-constant


【解决方案1】:

"数组,其大小取自 const 数组,在编译时中已知"

使用 C++11,您可以:

constexpr int size[2]={100, 100}; // size[0] is Compile-time constant

使用-std=c++11-std=c++0x编译

【讨论】:

  • @cpp:不,它没有。它适用于支持可变长度数组的 C++98 和 C99 的混合体,但在标准 C++ 中,您需要 constexpr 才能将数组元素用作编译时常量——这在 2011 年之前是不可用的。
【解决方案2】:

一些选项(受欢迎程度不同):

  1. 使用 constexpr(Visual Studio 不支持)
  2. 使用向量
  3. 使用动态分配
  4. 使用const int(C99 或更高版本或 C++)
  5. 使用enum
  6. 使用 MACRO 定义大小(因为它在编译时已知)

【讨论】:

  • 1. constexpr 可能是最好的解决方案,但它在 Visual Studio 2010 2.3 中不受支持。使用 Vector/Use 动态分配 - 这不是我需要的 4. 使用 MACRO/define - 并不比仅使用 consts 更好
  • 由于您使用的是 C++,因此您可以这样做,如果使用现代 C 编译器(C99 或更高版本 - 从技术上讲,这将是一个可变长度数组),这也是可能的,但如果您将代码编译为 C 代码。
【解决方案3】:

C++ 数组大小必须是常量表达式,而不仅仅是常量数据。 数组数据,即使是 const,也不是常量表达式。

array size and const

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 2010-10-30
    • 2012-10-04
    • 2020-03-06
    • 1970-01-01
    相关资源
    最近更新 更多