关于常量折叠,虚函数表的个人实践及一些看法,若有错漏处欢迎各位指正
相关链接:http://blog.csdn.net/shexinwei/article/details/6818331
http://www.cnblogs.com/likebeta/archive/2012/04/06/2435136.html
不想再码一次代码,直接上图片了:
相信跟我一样的小白都会很奇怪,变量i和指针p的内存地址是一样的,为什么输出的结果会不一样呢?这个看网上的说法是内存折叠,据说是thinking in c++翻译过来的,对这个说法我不是很理解,浏览了一些相关文章后总算有个人的一些想法,在此分享出来,如果正确也算给和我一样迷茫的人一些参考,如果不对希望各位前辈指出:
c++编译时对常量做了替换,并建立相应的符号表,在我看来是类似map的东西,根据key来取相应的value,以后每次调用常量都是根据常量名称从符号表取值,而不会从内存读取,所以尽管我们通过指针p修改了内存中的数值但常量i的值还是没变。
好吧,上面说的有点晕的感觉,简单来说,内存就像一个箱子,我们在内存中存放常量之的同时会在箱子上写上常量的值,以后每次要取常量值的时候就只看箱子上面 所谓数值而不管箱子里还是不是那个值,所以尽管*p=20修改了箱子里的数值但输出时i的值仍然 不变;当然这只是形象的说法,c++肯定不是这样实现的,这样说只是为了便于理解而已。
就是这样,欢迎各位指正。还有,标题下是我看过的一些较好的文章链接,觉得我说的不好的可以移步去看看。
08-05
08-05
08-05