我了解c++编译器通常不会在某些条件下为const int分配存储,而是诉诸const折叠。我尝试了一个简单的程序来测试:
int main()
{
const int num = 5;
int a[num];
}
我使用-g标志进行编译,并在gdb中运行了它。当尝试在此处访问变量num的地址时,它显示了一些有效地址。我没想到这一点。这里有什么见解吗?
最佳答案
I understand that c++ compilers do not usually allocate storage for a const int under certain conditions and resort to const folding.
对我来说,不清楚“通常”是否发生了固定折叠,也不清楚“通常”是否发生了固定折叠导致编译器未分配存储空间。编译器将以某种方式确定常量折叠是否合适以及是否分配存储空间。您可能要做的某些事情,例如将指针或对
const
对象的引用传递给函数,可能会影响其决策。无论如何,如果使用
-g
进行编译,那么绝对可以引导编译器为const int
变量分配存储空间。这是确保GDB中的print num
实际起作用的最简单方法。
关于c++ - G++中const中的存储分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62601753/