}
int&put(intn)
{
if(n>=0&&n<=9)returnvals[n];
else{cout<<"subscripterror";returnerror;}
}
(5)在另外的一些操作符中,却千万不能返回引用:
+-*/四则运算符。
它们不能返回引用,EffectiveC++[1]的Item23详细的讨论了这个问题。
主要原因是这四个操作符没有sideeffect,因此,它们必须构造一个对象作为返回值,可选的方案包括:
返回一个对象、返回一个局部变量的引用,返回一个new分配的对象的引用、返回一个静态对象引用。
根据前面提到的引用作为返回值的三个规则,第2、3两个方案都被否决了。
静态对象的引用又因为((a+b)==(c+d))会永远为true而导致错误。
所以可选的只剩下返回一个对象了。
4、引用和多态
引用是除指针外另一个可以产生多态效果的手段。
这意味着,一个基类的引用可以指向它的派生类实例。
【例7】:
class A;
class B:
publicA{……};
B b;
A &Ref=b;//用派生类对象初始化基类对象的引用
Ref只能用来访问派生类对象中从基类继承下来的成员,是基类引用指向派生类。
如果A类中定义有虚函数,并且在B类中重写了这个虚函数,就可以通过Ref产生多态效果。
引用总结
(1)在引用的使用中,单纯给某个变量取个别名是毫无意义的,引用的目的主要用于在函数参数传递中,解决大块数据或对象的传递效率和空间不如意的问题。
(2)用引用传递函数的参数,能保证参数传递中不产生副本,提高传递的效率,且通过const的使用,保证了引用传递的安全性。
(3)引用与指针的区别是,指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。
程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。
(4)使用引用的时机。
流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。
C++中指针和引用有什么区别(zz)
2006-11-3010:
08
指针与引用看上去完全不同(指针用操作符“*”和“->”,引用使用操作符“.”),但是它们似乎有相同的功能。
指针与引用都是让你间接引用其他对象。
你如何决定在什么时候使用指针,在什么时候使用引用呢?
首先,要认识到在任何情况下都不能使用指向空值的引用。
一个引用必须总是指向某些对象。
因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量。
相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用。
“但是,请等一下”,你怀疑地问,“这样的代码会产生什么样的后果?
”
char*pc=0;//设置指针为空值
char&rc=*pc;//让引用指向空值
这是非常有害的,毫无疑问。
结果将是不确定的(编译器能产生一些输出,导致任何事情都有可能发生)。
应该躲开写出这样代码的人,除非他们同意改正错误。
如果你担心这样的代码会出现在你的软件里,那么你最好完全避免使用引用,要不然就去让更优秀的程序员去做。
我们以后将忽略一个引用指向空值的可能性。
因为引用肯定会指向一个对象,在C++里,引用应被初始化。
string&rs;//错误,引用必须被初始化
strings("xyzzy");
string&rs=s;//正确,rs指向s
指针没有这样的限制。
string*ps;//未初始化的指针,合法但危险
不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针的要高。
因为在使用引用之前不需要测试它的合法性。
voidprintDouble(const