使用常量创建数组

时间:2010-03-19 21:38:36

标签: c++ arrays constants constant-expression

我正在使用gcc编译器在Linux上使用Netbeans编写一个程序,当在Windows 7上切换到Visual C ++时,代码无法编译,因为Visual C ++在几行上说expected constant expression。在Netbeans上,我只是做了一些类似于char name[fullName.size()];的东西,而在Visual C ++上,我试过了,除其他外,

const int position = fullName.size();
char Name[position];

如何创建一个用于数组的常量?

注意:我知道this question,但有什么方法可以让我在不使用向量的情况下工作,因为这需要重写程序的许多部分?

4 个答案:

答案 0 :(得分:2)

这在VC ++中是不可能的。我知道,非常难过:(

解决方案包括:

  • 在堆上创建
  • 让它保持不变

新的C ++标准(C ++ 0x)提出了一个“常量表达式”功能来处理这个问题。有关详情,请查看this

答案 1 :(得分:1)

C ++要求在编译时知道数组的大小。如果您不介意使用非标准扩展,gcc确实允许您正在执行的代码(请注意,虽然它不是标准C ++,但它在中是 标准,从C99开始)。< / p>

我还猜测你可以使用一个向量(在这个特定的地方)比你想象的麻烦少 - 为数组编写的相当多的代码可以使用只重新编译的向量,很少或根本没有重写。

答案 2 :(得分:1)

在VC ++中,您不能对堆栈数组大小进行运行时声明,但可以通过_alloca进行堆栈分配

所以这个:

const int position = fullName.size();
char Name[position];

成为这个:

const int position = fullName.size();
char * Name = (char*)_alloca(position * sizeof(char));

这不是一回事,但它与你将要进入VC ++一样接近。

答案 3 :(得分:0)

你的char name[fullName.size()];是一个variable-length array的例子 - 据我所知 - 它在C ++中没有标准化,所以你受编译器的支配。 [稍微偏离主题他们是C99标准的一部分]