Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否在堆栈上存储的函数中声明常量数组?_C++_Stack - Fatal编程技术网

C++ 是否在堆栈上存储的函数中声明常量数组?

C++ 是否在堆栈上存储的函数中声明常量数组?,c++,stack,C++,Stack,如果这是在函数中声明的,它会在堆栈上声明吗? (这让我好奇) 据我理解:是的。我被告知,您需要使用static限定常量,以便将它们放入数据段中,例如 void someFunction() { static const unsigned int actions[8] = { e1, e2, etc... }; } 如果不希望在堆栈上创建数组,请将其声明为静态数组。常量可

如果这是在函数中声明的,它会在堆栈上声明吗? (这让我好奇)


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

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

如果不希望在堆栈上创建数组,请将其声明为静态数组。常量可能允许编译器优化整个数组。但是如果要创建,它将在堆栈AFAIK上。

是的,它们在堆栈上。您可以通过查看以下代码片段看到这一点:它必须将销毁消息打印5次

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

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

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

出于好奇——有人知道是否定义了这种行为吗?也就是说,如果标准中规定了常数的存储?谢谢,多多少少。标准根本没有提到“堆栈”。但它确实指出,变量默认为自动存储持续时间,也就是说,当它们超出范围时会被销毁。实现的方法是使用堆栈。因此,不,您不能保证它被分配到(或)堆栈上,但可以保证它的行为就像它不约束一样,不会影响它<代码>静态会给它静态存储时间。Const只是指定它不能被修改,它不会影响生存期。这是一个糟糕的例子。无论
anarray
的存储位置如何,程序退出时必须销毁所有元素。您应该添加作用域块和打印以确保:
struct a{~a(){printf(“a destructed\n”);};int main(){{const A anarray[5];}printf(“main exiting\n”);}@arolson:谢谢,你说得对。顺便说一句,你可以用反引号将代码放在注释(和其他文本)中。你不是在暗示它是静态的会占用堆栈空间吗?@Dynite,我的一位同事曾经提到过这一点。然而,我不确定,所以我将删除我帖子的这一部分。@Dynite,我说的是废话。可在此处找到正确的信息:
struct A { ~A(){ printf( "A destructed\n" ); } };

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