是否在存储在堆栈中的函数内声明了const数组?

时间:2009-08-26 11:30:06

标签: c++ stack

如果在函数中声明了它,它是否会在堆栈中声明? (这是const是让我想知道的事情)

void someFunction()
{

     const unsigned int actions[8] = 
     {       e1,
             e2,
             etc...
     };
 }

4 个答案:

答案 0 :(得分:5)

是的,他们在堆栈中。你可以通过查看这段代码来看到这一点:它必须打印破坏消息5次。

struct A { ~A(){ printf( "A destructed\n" ); } };

int main() {
    {
      const A anarray  [5] = {A()} ;
    }
    printf( "inner scope closed\n");
}

答案 1 :(得分:4)

据我所知:是的。我被告知您需要使用static限定常量以将它们放入数据段中,例如。

void someFunction()
{
     static const unsigned int actions[8] = 
         {
             e1,
             e2,
             etc...
         };
}

答案 2 :(得分:2)

如果您不希望在堆栈上创建阵列,请将其声明为静态。作为const可能允许编译器优化整个数组。但如果它将被创建,它将在堆栈AFAIK上。

答案 3 :(得分:0)

是的,总是在堆栈上创建非静态变量。