读书人

【新手提问】关于const定义于头文件中

发布时间: 2012-02-21 16:26:23 作者: rapoo

【新手提问】关于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只是一个修饰符,表明该对象内容不能修改,所指向的不一定是常量。

读书人网 >C++

热点推荐