1.const * 和引用&
const
常量 常变量
常变量就是不能做左值,其他都和变量性质一样的。
常量在编译时候所有用到常量的地方都替换成常量的初始值。
1.C和C++第一个区别:
我们什么时候要加常引用呢?
很明显就是在引用我们常量的时候需要我们常引用。
函数返回值
内置类型产生的临时量都是常量 不可更改 通过eax 寄存器
自定义类型产生的临时量是变量 可以修改
<= 4 eax 寄存器带回
>4 <=8 eax edx两个寄存器带回
> 8 产生临时量
int GetInt()
{
int data = 10;
return data;
// mov eax,dword ptr[ebp-4];
//通过寄存器带回
}
int main()
{
int &a = GetInt(); //不能直接引用,因为右边不能取地址
const int &a = GetInt(); //加了const 是可以的,产生一个零时量
cosnt int *p = &GetInt(); //这样是产生不了零时量
//const & 不可寻址的常量
return 0;
}
2.动态内存开辟
malloc free
new delete
int main()
{
int *p = (int *)malloc (sizeof(int));
int *p = new int(10);
return 0;
}
malloc
作用:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针,分配失败返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。
malloc 向系统申请分配指定size字节内存空间,返回void*类型,在强转成自己要的类型。
free
作用:该函数是将之前用malloc 分配的空间还给操作系统,也就是释放这块内存,让它重新得到自由。
注意
1)申请了内存空间,必须检查是否分配成功
2)当不需要这块申请的内存时候,记得释放。释放后记得把它置为NULL。
3)同一块内存不能释放两次。
new运算符
C++中,用new和delete 动态创建和释放数组或单个对象。
动态创建对象时,只需指定其数据类型,而不必为对象命名,new表达式返回值向该创建对象的指针,我们可以通过指针来访问此对象。
初始化问题
int *p = new int(); //初始化为0
int *p = new int ; //p指向一个没有初始化的int
malloc 失败返回NULL
new失败是抛出ad_alloc 异常
malloc 是需要我们计算出申请内存的字节数,并且在返回强行转换为实际类型的指针。
new 返回是指定类型的指针,并且可以自动计算所需大小。
int *p = (int *) operator new(sizeof(int));
p = new(p) int (10); //init
//定位new
第三个作用域
C作用域
局部作用域
全局作用域
C++的作用域
局部作用域
类作用域
名字空间作用域namespace
这个是为了解决同一变量名在统一作用域下的名字冲突问题。