一、关于拷贝构造函数
1、相同类型的类对象是通过拷贝构造函数来完成整个复制过程的;
2、拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量;
3、三种情况下会调用拷贝构造函数:对象以值传递的方式传入函数参数、对象以值传递的方式从函数返回、对象需要通过另外一个对象进行初始化;
相关博文:
http://blog.csdn.net/lwbeyond/article/details/6202256
二、常量折叠
1、编译器进行语法分析的时候,将常量表达式计算求值,并用求得的值来替换表达式,放入常量表;
2、const定义的变量a=10,编译时会进行优化,即只要代码中遇到这个变量a,就会从常量表中找到对应的那个常量10来替换这个变量a,相当于宏定义;
3、所以就算我们把存储const变量a的内存内容改了,改成了20,打印变量a时仍然是打印出10.
三、C/C++中堆和栈的理解
1、C++程序内存分为6个区:
(1)栈区——由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
(2)堆区——(new/delete)一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。
(3)全局/静态区——全局变量和静态变量被分配到同一块内存中。
(4)自由存储区——由malloc等分配的内存块,他和堆是十分相似的, 不过它是用free来结束自己的生命的。
(5) 常量存储区——这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改。程序结束后由系统释放。
(6)程序代码区—— 存放函数体的二进制代码。
相关博文:
http://www.cnblogs.com/likwo/archive/2010/12/20/1911026.html
http://blog.csdn.net/nieyibin/article/details/7468323