1)const引用就是指向const对象的引用,非const引用就是指向非const对象的引用。
2)非const引用只能绑定到与该引用同类型的对象,而const引用则可以绑定到不同但是相关的类型对象或者绑定到右值。
3)普通的非const引用形参在使用时不能用const对象初始化,也不能用字面值或者产生右值得表达式实参初始化。
例如:声明如下函数
string::size_type find_char(string& s,char c);
在使用的时候,存在变量const string& str = “hello”,如果调用函数是采用以下方式:int k= find_char(str,‘h’),将会出现编译错误,因为不能使用const引用实参对非const引用形参进行复制。int k = find_str(“hello”,‘h’),也是错误的,不能使用右值对非const引用进行初始化。
但是,如果函数声明如下:
string::size_type find_char(const string& s,char c);则以上两个使用方式都正确,并且可以使用非const引用对s进行赋值。即 string & str = “hello”,int k = find_char(str,‘h’)是正确的。