【发布时间】:2010-11-22 23:22:40
【问题描述】:
如果这是在函数中声明的,它会在堆栈上声明吗? (它是 const 让我感到奇怪)
void someFunction()
{
const unsigned int actions[8] =
{ e1,
e2,
etc...
};
}
【问题讨论】:
如果这是在函数中声明的,它会在堆栈上声明吗? (它是 const 让我感到奇怪)
void someFunction()
{
const unsigned int actions[8] =
{ e1,
e2,
etc...
};
}
【问题讨论】:
是的,它们在堆栈上。您可以通过查看这段代码 sn-p 看到这一点:它将必须打印 5 次销毁消息。
struct A { ~A(){ printf( "A destructed\n" ); } };
int main() {
{
const A anarray [5] = {A()} ;
}
printf( "inner scope closed\n");
}
【讨论】:
static 会给它静态存储持续时间。 const 只是指定它不能被修改,它不影响生命周期。
anarray 的存储位置如何,所有元素都必须在程序退出时销毁。您应该添加范围块和打印以确保: struct A { ~A(){ printf( "A destructed\n" ); } }; int main() { { const A anarray[5]; } printf("主要退出\n"); };
据我了解:是的。有人告诉我,您需要使用 static 限定常量才能将它们放入数据段中,例如
void someFunction()
{
static const unsigned int actions[8] =
{
e1,
e2,
etc...
};
}
【讨论】:
如果您不希望在堆栈上创建数组,请将其声明为静态。作为 const 可能允许编译器优化整个数组。但如果它被创建,它将在堆栈 AFAIK 上。
【讨论】:
是的,非静态变量总是在堆栈上创建。
【讨论】: