`
shi5jin
  • 浏览: 38035 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

为何C++既有指针也有引用?

阅读更多

 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++中的指针.doc

    总的来说,C/C++中的指针是一把双刃剑,既能提供强大的功能,也可能引发难以预料的错误。因此,理解并熟练掌握指针的使用是每个C/C++程序员必备的技能。在实际编程中,应特别注意指针的生命周期和作用范围,避免出现...

    彻彻底底搞定C/C++指针

    #### 第贰篇:指针是什么? 1. **指针的本质** 指针是一种特殊的变量,它可以存储另一个变量的地址。这意味着指针变量中保存的是地址而不是具体的值。例如,`int *p;`声明了一个名为`p`的指针变量,它能够存储...

    C#通过C++/CLI间接调用NativeCPP类的DLL文件

    在.NET框架中,C#与原生C++代码的交互是一个常见的需求,特别是在既有C++代码库需要融入到.NET应用程序中的场景。本话题主要探讨如何通过C++/CLI(Managed C++)作为桥梁,使C#能够间接调用原生C++编译的DLL文件。...

    引用与指针

    3. 引用的大小与所引用的对象相同,而指针有自己的固定大小,通常为4个字节(取决于平台)。 4. 引用在使用上更为安全,因为它不存在空引用问题,也不会出现指针的野指针现象。 在涉及到const关键字时,常量指针与...

    C++中引用传递与指针传递的区别(面试常见)

    根据自己的经验,联想到了swap函数,只知道既可以用引用来实现,又可以用指针传递来实现,至于二者有何区别,自己还真没有考虑过。 痛定思痛,受虐之后,赶紧弥补自己的知识漏洞。 通过在网上搜集资料,自己也整理了...

    写给大忙人看的C++,完整扫描版

    等待吧,兄弟】《写给大忙人看的C++》全面介绍了C++语言知识,既提供了学习C++语言最新功能的捷径,也为快速找到特定问题的答案提供了便利。《写给大忙人看的C++》简明地描述了C++核心语言和标准库中几乎所有的函数...

    C++98/C++03/C++11/C++14/C++17/C++20 标准帮助文档 2020-09-04

    本文将深入探讨C++98、C++03、C++11、C++14、C++17以及最新的C++20标准中的关键变化和新增特性。 **C++98/03:基础与早期扩展** C++98是C++的第一个正式标准,它定义了语言的基本结构,包括面向对象编程(OOP)的...

    ISO C++11和C++14 标准

    《ISO C++11和C++14标准》是C++编程语言的两个重要版本,它们为这个强大的系统级编程语言带来了许多革新和改进。C++11是自C++98以来的第一个重大更新,而C++14则是对C++11的进一步完善和扩展。这两个标准对C++程序员...

    c++常量引用-基础学习

    3. **模板**:在模板类或函数中,常量引用作为参数类型可以确保模板实例化时既能处理普通变量,也能处理常量变量。 4. **STL容器**:标准模板库(STL)中的容器,如`std::vector`和`std::map`,它们的迭代器通常...

    C++大学教程C++ How to Program(中英文)

    书中的中英文双语版设计,既可以帮助中国学生更好地理解C++的概念,也可以提高他们的英语阅读能力,对于想要进一步学习国际技术文档或阅读原始源代码的程序员来说,是一大优势。通过对比两种语言的表述,可以加深对...

    一个Java程序员的C++学习之路

    与Java中的引用不同,C++中的指针可以进行复杂的操作,如指针算术、直接内存访问等。掌握指针的使用方法对于编写高效的C++程序至关重要。此外,C++没有内置的垃圾回收机制,因此程序员需要自己负责内存的分配与释放...

    C++方法转C#

    这对于跨平台开发或者维护既有C++代码库,而又希望利用C#语言优势的情况非常有用。它可以帮助开发者节省大量手动转换的时间,同时减少由于人工转换可能引入的错误。 在转换过程中,一些特定的C++特性如运算符重载、...

    C++常量详解一(常量指针与常量引用的初始化)

    - 另一方面,如果指针本身也是常量(const int *const p),那么这个指针既不能改变其指向的值,也不能改变它所指的地址,因此必须在声明时初始化。 1.1.1 常量指针的分类: - 第一类:const int m,这是一个普通...

    写给大忙人看的C++

    《写给大忙人看的C++》既适合需要快速了解C++的初学者,也适合想要了解C++11的新特性的有C++编程经验的高级程序员,还可作为开发人员工作中的C++综合参考。 《写给大忙人看的C++》全面介绍了C++语言知识,既提供了...

    C++头文件转delphi .pas

    转换过程中,指针、引用、模板等C++特性也需要适当地映射到Delphi的相应概念,如指针类型、接口和泛型。 这个博士编写的转换工具可能采用了以下方法: 1. **语法解析**:工具首先需要解析C++的头文件,识别出各种...

    非托管C++委托实现

    2. **多重继承(Multiple Inheritance)**:C++允许一个类继承自多个基类,这在实现委托时可能是必要的,因为我们需要一个类既能存储方法指针,又能够触发方法的调用。多重继承可以使得此类具备"存储"和"调用"的能力...

    电子书 深入理解C++11(PDF)

    5. **统一的初始化语法**:C++11引入了花括号初始化,既可以用作列表初始化,也可以用作聚合初始化,统一了旧有的两种初始化方式。 6. **智能指针(Smart Pointers)**:C++11标准库提供了三种智能指针:`std::unique...

Global site tag (gtag.js) - Google Analytics