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
分享到:
相关推荐
总的来说,C/C++中的指针是一把双刃剑,既能提供强大的功能,也可能引发难以预料的错误。因此,理解并熟练掌握指针的使用是每个C/C++程序员必备的技能。在实际编程中,应特别注意指针的生命周期和作用范围,避免出现...
#### 第贰篇:指针是什么? 1. **指针的本质** 指针是一种特殊的变量,它可以存储另一个变量的地址。这意味着指针变量中保存的是地址而不是具体的值。例如,`int *p;`声明了一个名为`p`的指针变量,它能够存储...
在.NET框架中,C#与原生C++代码的交互是一个常见的需求,特别是在既有C++代码库需要融入到.NET应用程序中的场景。本话题主要探讨如何通过C++/CLI(Managed C++)作为桥梁,使C#能够间接调用原生C++编译的DLL文件。...
3. 引用的大小与所引用的对象相同,而指针有自己的固定大小,通常为4个字节(取决于平台)。 4. 引用在使用上更为安全,因为它不存在空引用问题,也不会出现指针的野指针现象。 在涉及到const关键字时,常量指针与...
根据自己的经验,联想到了swap函数,只知道既可以用引用来实现,又可以用指针传递来实现,至于二者有何区别,自己还真没有考虑过。 痛定思痛,受虐之后,赶紧弥补自己的知识漏洞。 通过在网上搜集资料,自己也整理了...
等待吧,兄弟】《写给大忙人看的C++》全面介绍了C++语言知识,既提供了学习C++语言最新功能的捷径,也为快速找到特定问题的答案提供了便利。《写给大忙人看的C++》简明地描述了C++核心语言和标准库中几乎所有的函数...
本文将深入探讨C++98、C++03、C++11、C++14、C++17以及最新的C++20标准中的关键变化和新增特性。 **C++98/03:基础与早期扩展** C++98是C++的第一个正式标准,它定义了语言的基本结构,包括面向对象编程(OOP)的...
《ISO C++11和C++14标准》是C++编程语言的两个重要版本,它们为这个强大的系统级编程语言带来了许多革新和改进。C++11是自C++98以来的第一个重大更新,而C++14则是对C++11的进一步完善和扩展。这两个标准对C++程序员...
3. **模板**:在模板类或函数中,常量引用作为参数类型可以确保模板实例化时既能处理普通变量,也能处理常量变量。 4. **STL容器**:标准模板库(STL)中的容器,如`std::vector`和`std::map`,它们的迭代器通常...
书中的中英文双语版设计,既可以帮助中国学生更好地理解C++的概念,也可以提高他们的英语阅读能力,对于想要进一步学习国际技术文档或阅读原始源代码的程序员来说,是一大优势。通过对比两种语言的表述,可以加深对...
与Java中的引用不同,C++中的指针可以进行复杂的操作,如指针算术、直接内存访问等。掌握指针的使用方法对于编写高效的C++程序至关重要。此外,C++没有内置的垃圾回收机制,因此程序员需要自己负责内存的分配与释放...
这对于跨平台开发或者维护既有C++代码库,而又希望利用C#语言优势的情况非常有用。它可以帮助开发者节省大量手动转换的时间,同时减少由于人工转换可能引入的错误。 在转换过程中,一些特定的C++特性如运算符重载、...
- 另一方面,如果指针本身也是常量(const int *const p),那么这个指针既不能改变其指向的值,也不能改变它所指的地址,因此必须在声明时初始化。 1.1.1 常量指针的分类: - 第一类:const int m,这是一个普通...
《写给大忙人看的C++》既适合需要快速了解C++的初学者,也适合想要了解C++11的新特性的有C++编程经验的高级程序员,还可作为开发人员工作中的C++综合参考。 《写给大忙人看的C++》全面介绍了C++语言知识,既提供了...
转换过程中,指针、引用、模板等C++特性也需要适当地映射到Delphi的相应概念,如指针类型、接口和泛型。 这个博士编写的转换工具可能采用了以下方法: 1. **语法解析**:工具首先需要解析C++的头文件,识别出各种...
2. **多重继承(Multiple Inheritance)**:C++允许一个类继承自多个基类,这在实现委托时可能是必要的,因为我们需要一个类既能存储方法指针,又能够触发方法的调用。多重继承可以使得此类具备"存储"和"调用"的能力...
5. **统一的初始化语法**:C++11引入了花括号初始化,既可以用作列表初始化,也可以用作聚合初始化,统一了旧有的两种初始化方式。 6. **智能指针(Smart Pointers)**:C++11标准库提供了三种智能指针:`std::unique...