c++中关于const常量内存分配和强制修改的有关问题

c++中关于const常量内存分配和强制修改的问题
请问

1. 在c++中编译器会对const常量进行优化,把它放到符号表中,不为其分配存储空间,在编译时进行类似于宏定义的操作,在出现const常量的地方在编译时就替换成其对应的值,只有对const常量使用extern关键字或者取地址操作时才对其分配内存。

2. 

#define PI 3.14159         file://常量宏
const doulbe  Pi=3.14159;  file://此时并未将Pi放入ROM中
              ......
double i=Pi;               file://此时为Pi分配内存,以后不再分配!
double I=PI;               file://编译期间进行宏替换,分配内存
double j=Pi;               file://没有内存分配
double J=PI;               file://再进行宏替换,又一次分配内存!


请问1和2 到底哪种说法是对的? 在2中“double i=Pi;"  这里没有使用extern也没有取地址操作就对const常量pi分配内存了,这是为什么?
------解决思路----------------------
 这里没有使用extern也没有取地址操作就对const常量pi分配内存了
这是不对的