C++入门
1.c++引用和指针的相同和区别;
引用不可以为空,但指针可以为空。前面也说过了引用是对象的别名,引用为空——对象都不存在,怎么可能有别名!故定义一个引用的时候,必须初始化。因此如果你有一个变量是用于指向另一个对象,但是它可能为空,这时你应该使用指针;如果变量总是指向一个对象,你的设计不允许变量为空,这时你应该使用引用。
总结:指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名,引用不改变指向。
2.指针常量VS引用常量
在指针定义语句的指针名前加const,表示指针本身是常量。在定义指针常量时必须初始化!而这是引用天生具来的属性,不用再引用指针定义语句的引用名前加const。
指针常量定义”int* const pointer=&b”告诉编译器,pointer是常量,不能作为左值进行操作,但是允许修改间接访问值,即*pointer可以修改。
总结:const放到谁前面谁就不可以当左值,即不可修改;
//指针常量(地址不可改变)
int a=10;
int* const p1=&a;
//必须初始化,const加在指针名前面,代表该指针指向的地址是一个常量且不可改变(不能作为左值);
//常量指针(值不可改变)
int a=10;
const int* p2=&a;//意为指向的内容不可改变;
3.inline与宏
宏函数:
# define ADD(x,y) ((x)*(y))//宏函数
int main()
{
int a=2,b=3;
ADD(a+b,b);
return 0;
}
优点:不用调用栈,提高运行效率;但是在预编译时,直接会把函数体放到函数调用处,会增加可执行文件的大小,这一点和内联函数相似;
缺点:也就是内联函数的优点;
inline(内联函数):把定义的函数体直接展开到函数使用处;
inline void fun1(int a)
//inline内联函数声明和定义必须放到一起
//否则当声明展开后,因为不像调用函数那样,
//可以直接call到函数体;
{
cout<<a<<endl;
}
int main()
{
fun1(1);
return 0;
}
相同点:用空间换时间,提高代码运行效率;但是内联函数可能会导致目标文件冗余,如果需要展开的函数实在太多,那么系统可能不会同意inline请求;
inline的优点:
1.内联可调试;
2.可进行类型安全检查或自动类型转换;
3.可访问成员变量。
可能不会同意inline请求;
inline的优点:
1.内联可调试;
2.可进行类型安全检查或自动类型转换;
3.可访问成员变量。
*另外,定义在类声明中的成员函数自动转化为内联函数。*