猿问

在线等! 在编译过程中C++是否能获得变量的地址

今天在阅读C++Primer"constexrp和常量表达式"章节时发现有这么一句话:"常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式"又有:"C++11标准新规定,允许将变量声明为constexpr来由编译器验证变量的值是否是一个常量表达式"在验证constexpr类型说明符功能时我编写了如下代码:#includeinta=99;constexprint*pa=&a;intmain(){std::cout<<pa<<std::endl;return0;}这段代码编译通过了并输出了结果;我的疑问是,按我一直以来的理解,程序中的数据是在运行时才会被加载到内存中的,这里a应该是放在了全局/静态存储区;而这里constexprint*pa=&a;通过了编译,说明&a是一个可以在编译过程中获得结果的常量表达式,所以说这里C++编译器在编译过程中就得到了&a的计算结果即a的地址?
30秒到达战场
浏览 364回答 2
2回答

心有法竹

没用过C++但是编译器在编译过程就会把变量的地址确定下来而局部变量不一样它是放在栈中的地址在运行中才会确定下来举个例子:假如我编译一门语言在内存中分配了一块内存供变量使用假设地址从0开始算遇到一个新变量地址标为0并记录在哈希表中再遇到一个新变量地址标为1依此类推并且用符号表记录下来如果遇到的一个变量已经在哈希表中那代表不是新变量//变量哈希表类似这样值是内存地址{a:0,b:1,c:2}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答