1、const
const int * :指向const对象的指针
1、不能通过该指针来修改对象的值,但是可以使指针指向不同的对象;
2、非const对象的指针不能指向一个const对象;
3、非const对象的地址可以赋给const对象的指针;
const int* const
const参数和非const参数,算函数重载;
2、引用
1)、必须初始化,一旦已经定义,就不能再指向其他的对象;
2)、引用的操作实际上都应用在它所指的对象身上;
3)、const引用可以用不同类型的对象初始化,只要能完成类型转换;
4)、不允许非const引用指向需要临时对象的对象或值,比如:
SetNickname(int userid,Octets & nickname)方法,采用下面的方式会编译错误
SetNickname(100,Octets());提示方法参数是Octets&,而不是Octets。
而将方法改为SetNickname(int userid,const Octets & nickname)时就可以。
5)、如果一个引用给另一个引用赋值,那么改变的是被引用的对象,而不是引用本身(两个引用仍然指向原来的对象)。所以可以用引用参数来完成两个参数值交换的方法。P89
STL容器
只要容器里放的不是指针,怎么修改查到的东西,都不会影响容器里存的东西。返回的都是副本。改了deliver的gmcontainer类,查找返回std::vector<int>*。insert效率比map[**]=**效率高,因为新元素必须先使用default构造函数将value初始化,而这个初值马上又被真正的value给覆盖了;
const int * :指向const对象的指针
1、不能通过该指针来修改对象的值,但是可以使指针指向不同的对象;
2、非const对象的指针不能指向一个const对象;
3、非const对象的地址可以赋给const对象的指针;
int * const:指向非const对象的const指针:不能使该指针指向新的对象,但是可以改变它指向的值;
const int* const
const参数和非const参数,算函数重载;
2、引用
1)、必须初始化,一旦已经定义,就不能再指向其他的对象;
2)、引用的操作实际上都应用在它所指的对象身上;
3)、const引用可以用不同类型的对象初始化,只要能完成类型转换;
4)、不允许非const引用指向需要临时对象的对象或值,比如:
SetNickname(int userid,Octets & nickname)方法,采用下面的方式会编译错误
SetNickname(100,Octets());提示方法参数是Octets&,而不是Octets。
而将方法改为SetNickname(int userid,const Octets & nickname)时就可以。
5)、如果一个引用给另一个引用赋值,那么改变的是被引用的对象,而不是引用本身(两个引用仍然指向原来的对象)。所以可以用引用参数来完成两个参数值交换的方法。P89
STL容器
只要容器里放的不是指针,怎么修改查到的东西,都不会影响容器里存的东西。返回的都是副本。改了deliver的gmcontainer类,查找返回std::vector<int>*。insert效率比map[**]=**效率高,因为新元素必须先使用default构造函数将value初始化,而这个初值马上又被真正的value给覆盖了;