C++ 的指针继承于 C,若要移除指针,势必造成严重的兼容性问题。引用有几方面的用处,但我在 C++ 中引入它的主要目的是为了支持运算符重载。例如:
void f1(const complex* x, const complex* y) // 没有引用
{
complex z = *x+*y; // 难看
// ...
}
void f2(const complex& x, const complex& y) // 使用引用
{
complex z = x+y; // 看起来不错
// ...
}
更一般地,如果你想要同时拥有指针功能和引用功能,那就需要两种不同的类型(C++ 里就是这么干的)或者对一个单独的类型有两套不同的操作。例如,如果采用单一类型的话,则需要有给被引用的对象赋值的操作以及给引用/指针赋值的操作。这 可通过使用不同的运算符来完成(Simula 里就是这么干的)。例如:
Ref<My_type> r :- new My_type;
r := 7; // 赋值给对象
r :- new My_type; // 赋值给引用
或者,你也可以依赖类型检测系统(重载)。例如:
Ref<My_type> r = new My_type;
r = 7; // assign to object
r = new My_type; // assign to reference
原文地址:http://www.research.att.com/~bs/bs_faq2.html#pointers-and-references
分享到:
相关推荐
根据自己的经验,联想到了swap函数,只知道既可以用引用来实现,又可以用指针传递来实现,至于二者有何区别,自己还真没有考虑过。 痛定思痛,受虐之后,赶紧弥补自己的知识漏洞。 通过在网上搜集资料,自己也整理了...
等待吧,兄弟】《写给大忙人看的C++》全面介绍了C++语言知识,既提供了学习C++语言最新功能的捷径,也为快速找到特定问题的答案提供了便利。《写给大忙人看的C++》简明地描述了C++核心语言和标准库中几乎所有的函数...
《写给大忙人看的C++》既适合需要快速了解C++的初学者,也适合想要了解C++11的新特性的有C++编程经验的高级程序员,还可作为开发人员工作中的C++综合参考。 《写给大忙人看的C++》全面介绍了C++语言知识,既提供了...
IT科技日新月异,计算机编程语言之间更是你追我赶,每一种语言之间既各有创新与自身特色之处, 如C++11带来了①右值引用与移动语义及其衍生的移动构造函数、②function包装器、③作用域内枚举(以支持同名枚举)等等...
7.左值表达式在赋值语句中既可以作为左操作数,也可以作为右操作数。而右值表达式在赋值语句中只能作为右操作数。 8.指向常量的指针是在非常量指针声明前面使用const,比如:const int *p 9.在数组的泛型算法中,要...
为什么 Java 只有值传递,但 C++ 既有值传递,又有引用传递呢?今天我们就来探讨下这个问题,有需要的朋友可以参考下
为次,ANSI和ISO的联合委员会于1989年着手为C++制定标准。1994年2月,该委员会出版了第一份非正式草案,1998年正式推出了C++的国际标准。 (二) C和C++ C++是C的超集,也可以说C是C++的子集,因为C先出现。按常理说...
“引用”与指针的区别是什么? 指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。此外,...
10.3.2 通过指针引用数组元素 143 10.3.3 数组名作函数参数 146 10.3.4 指向多维数组的指针和指针变量 148 10.4 字符串的指针指向字符串的针指变量 150 10.4.1 字符串的表示形式 152 10.4.2 使用字符串指针变量与...
如果传引用比传指针安全,为什么?如果我使用常量指针难道不行吗? (1) 引用在创建的同时必须初始化,即引用到一个有效的对象;而指针在定义的时候不必初始化,可以在定义后面的任何地方重新赋值. (2) 不存在...
19.1 既有类的再利用 19.2 组合(Composition) 19.3 组合对象的构造函数和析构函数 19.4 继承(Inheritance) 19.5 protected成员 19.6 派生类所定义的对象的构造和析构次序 19.7 混合组合和继承以建立新的类 ...
7.C++中为什么用模板类。 答:(1)可用来创建动态增长和减小的数据结构 (2)它是类型无关的,因此具有很高的可复用性。 (3)它在编译时而不是运行时检查数据类型,保证了类型安全 (4)它是平台无关的,可移植性 ...
10.3.2 通过指针引用数组元素 143 10.3.3 数组名作函数参数 146 10.3.4 指向多维数组的指针和指针变量 148 10.4 字符串的指针指向字符串的针指变量 150 10.4.1 字符串的表示形式 152 10.4.2 使用字符串指针变量与...
CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 该资料是《Visual C++ 2010入门经典(第5版)》的源代码及课后练习答案 对应的书籍资料见: Visual C++ 2010...
采用智能指针类来管理接口的引用计数及生命期,可从一个接口动态转换为另一个接口(内部采用C++的RTTI机制动态转换),可以区分插件内部的接口引用和插件外部的接口引用。 d) 模块透明部署 一个模块只需要使用其他...
在C++中,只有单个形参,而且该类型是对本类类型的引用(常用const修饰),这样的构造函数称为复制构造函数。 复制构造函数既可以自己定义又可以像默认构造函数一样被编译器隐式调用。但大多数时候,特别是类中...
为什么必须管理内存 内存管理是计算机编程最为基本的领域之一。在很多脚本语言中,您不必担心内存是如何管理的,这并不能使得内存管理的重要性有一点点降低。对实际编程来说,理解您的内存管理器的能力与局限性至关...
为什么必须管理内存 内存管理是计算机编程最为基本的领域之一。在很多脚本语言中,您不必担心内存是如何管理的,这并不能使得内存管理的重要性有一点点降低。对实际编程来说,理解您的内存管理器的能力与局限性至...
首先,函数指针只能指向静态函数,而delegate既可以引用静态函数,又可以引用非静态成员函数。在引用非静态成员函数时,delegate不但保存了对此函数入口指针的引用,而且还保存了调用此函数的类实例的引用。其次,与...