【新手提问】关于const定义于头文件中的疑惑,该怎么解决

【新手提问】关于const定义于头文件中的疑惑
const.h文件
C/C++ code

#include <math.h>
const double sq2 = sqrt(2.0);//不好的习惯,但是先这么定义着
const double pi = 3.14159;
void test();// 在E233.cpp中定义



E232.cpp
C/C++ code

#include <iostream>
#include "const.h"
int main(){
    // 打印变量地址
    std::cout<<"&sq2="<<&sq2<<std::endl;
    std::cout<<"&pi="<<&pi<<std::endl;
    test();
}


E233.cpp
C/C++ code

#include <iostream>
#include "const.h"
void test(){
    std::cout<<"in test &sq2="<<&sq2<<std::endl; // 打印地址
    std::cout<<"in test &pi="<<&pi<<std::endl;// 打印地址
}



结果发现结果如下:
&sq2=0041A190
&pi=00418820
in test &sp2=0041A1A0
in test &pi=00418868
无论是否使用常量表达式在头文件中定义const变量,始终在包含了头文件的源文件中,CONST变量都会被分配内存空间?
也就是两个CPP文件中的pi都不是一个内存地址?
我这么理解对吗?谢谢!
以上代码VS2005编译执行



------解决方案--------------------
是的,每个对象都有其对应的内存空间。
const不是常量的意思,而是指不可修改的意思。

左值

楼主应该看看左值,右值。还有就是别看老谭的书,看了就忘了把。看c++primer;
------解决方案--------------------
1、const对象也是对象,必须分配空间,因此地址不同。
2、可以使用非const对象来初始化const对象,只是拷贝内容,跟引用对象无关。
3、const只是一个修饰符,表明该对象内容不能修改,所指向的不一定是常量。