区别pointers和references

FastAPI + Layui:打造企业级敏捷开发后台管理系统 本文详细介绍了如何使用FastAPI和Layui构建高效的企业级后台管理系统。FastAPI提供高性能的异步API支持,而Layui则简化了前端开发流程,两者结合可实现快速开发和部署。文章涵盖了从环境搭建、核心组件开发到性能优化的全流程,特别适合需要敏捷开发的企业项目。 阅读详情

C++中提供两种间接参考对象:pointers和references。pointers使用“*”和“->”操作符,references则使用“ . ”。

但是什么时候使用哪种方式?通过学习《More Effective C++》的条款1学习总结了以下情况:

(1)一个references必须总代表某个对象,不可能存在null references。所以当你使用一个变量,其目的是用来指向代表另外一个对象,但是也有可能它不指向任何对象。那么你应该使用pointer。因为pointer可以指向null。换个角度,如果该变量始终需要指向一个对象,不可能使其变为null,那么你应该使用reference。

        例: char *pc = 'a';    pc = NULL ;  //正确,可以改变其值。

                 char& pc2 = *pc; //该语句表达的是pc2代表空指针的引用!!!!这是有害的行为。C++对此没有明确定义,会导致不可预期的后果!

       所以,请记住:永远不再考虑“reference 成为 null”的可能性。

(2)reference一定代表某个对象。C++要求其必须有初值。

       例: string & rs;  //错误,无初值!

                string s("xyz");     string& rs = s;//正确

          另外,使用references可能会比使用pointers更具有效率,因为它不用检测为NULL的情况。如果参数值是指针的话,还需要检测指针是否为NULL的情况。

(3)Pionters和references之间另一个重要的差异是,pointers可以被重新赋值,指向另一个对象,reference却总是指向它最初获得的对象。

          例: string s1("nacy");

                   string s2("chancy");

                   string& rs = s1;  //rs为s1的引用

                   string *ps = &s1; //ps为s1的指针

                   rs = s2;   //rs仍然代表s1,但是现在s1的值现在变成了“chancy”

                   ps = &s2;  //ps现在指向s2,s1没有变化。


  书中总结:当你知道你需要指向某个东西,而且绝不会改变指向其他东西。当你实现一个操作符而其语法需求无法通过pointer完成,你就应该选择references。任何其他时候,请采用pointers。


从零构建爬虫抓取故宫数字文物库:Python最新实战技术详解 熟悉了动态内容加载的网页结构解析技巧。掌握了 Playwright + BeautifulSoup 的组合用法。实现了从网页→JSON→详情→图像的完整数据闭环。掌握了结构化保存与可视化分析能力。 阅读详情

相关推荐

Java实战:绿盾加密文件批量解密工具Ldterm的实现与优化

本文详细介绍了基于Java开发的绿盾加密文件批量解密工具Ldterm的实现与优化过程。通过分析绿盾加密机制,结合Java流处理能力,实现了高效的文件解密方案,并分享了多线程处理、内存优化等性能提升技巧,适用于企业级数据迁移与备份场景。

weixin_29314405的博客 492

STL之迭代器&&迭代器失效

1.说说设计模式?(迭代器模式)         迭代器模式作为STL的六大组件之一,通俗来讲,它就是用来遍历容器的,对容器进行一定的操作。我们通常使用的容器vector、list、map、set、multimap、multiset、deque,内部是实现有顺序表、链表、红黑树。如果我们遍历这些容器就要明白它们的底层构造,相当不方便。iterator被定义出来就是不需要了解这些容器的底层实现,来...

Demons的博客 591

直流并联电压源的下垂控制与模拟光伏板特性的方法与仿真

并联直流电源下垂控制方法,下垂特性可以让并联直流电源输出功率/电流自动均衡,直流电源输出特性模拟光伏板的输出特性,具有自动限制输出最大功率的功能

1197

STL学习笔记-容器

转载自:http://blog.youkuaiyun.com/lwbeyond/article/details/7301443 一.STL 组件 1. 容器(Containers):用来管理某类对象的集合。 2. 迭代器(Iterators):用来在一个对象群集的元素上进行遍历动件。迭代器的接口和一般指针差不多,以operator++累加,以operator* 提取所指的值。

Invoker's Tower 485

VLA算法总结对比——RT1 / RT2 / Pi0 / Octo/ RDT / OpenVLA

本文主要针最近比较经典的VLA算法进行对比总结,暂不涉及到代码细节和实验细节上的展开,仅仅是从大面上掌握下目前VLA的一些思路和方法。

weixin_44580210的博客 9497

汽车IVI中控开发入门及进阶(47):CarPlay开发

车载信息娱乐(IVI)系统已经从仅仅播放音乐的设备发展成为现代车辆的核心部件。除了播放音乐,IVI系统还为驾驶员提供导航、通信、空调、电源配置、油耗性能、剩余行驶里程、节能建议和许多其他功能。​驾驶座逐渐变成了你家和工作场所之外的额外生活空间。2014年,苹果推出了Apple CarPlay,这是一款汽车界面,允许驾驶员使用iPhone应用程序和其他IVI功能,如苹果地图、Siri、苹果音乐、iMessage,并拨打电话。

码农17年的博客 1129

More Effective C++(1):pointers和references

首先,我们从pointers(指针)、reference(引用)、casts(类型转换)、arrays(数组)、constructors(构造函数)说起,这些议题,几乎是C++程序最基础的部分,大多数情况都会用到上述所有特性。 首先,今天作为此专题的第一节,我们谈一下pointers和references的区别 想必C/C++的初学者对pointers和references的感觉是既爱又恨的。他们...

FEEL的博客 334

Monorepo与pnpm:前端项目管理的完美搭档

pnpm又称 performant npm,翻译过来就是高性能的npm。Monorepo是一种项目开发与管理的策略模式,它代表"单一代码仓库"(Monolithic Repository)。在Monorepo模式中,所有相关的项目和组件都被存储在一个统一的代码仓库中,而不是分散在多个独立的代码仓库中,这些项目之间还可能会有依赖关系。

m0_68271787的博客 2562

STL迭代器详解

文章目录1. 迭代器(iterator)是一种智能指针(smart pointer)2. 迭代器相应类型(associate types) 不同于OOP(Object Oriented Programming)将数据(datas)和行为(methods)组织在一起的思想,STL的中心思想GP(Generic Programming)在于:将数据容器(containers)和算法(algorithms)分开,彼此独立设计,最后再以胶着剂将它们撮合在一起。那么之间的胶着剂就是迭代器(iterator)。

To the beyond and infinity! 2779

Python爬虫实战:股票历史数据抓取与量化回测全流程详解

我们以**东方财富网(eastmoney.com)和雪球网(xueqiu.com)**为主要目标,演示如何爬取A股历史行情。最常用的HTTP请求库,简单易用,适合静态页面数据请求。本文详细介绍了从股票历史数据抓取到简单回测的完整流程,代码示例基于最新技术,结构清晰,适合初学者和进阶者学习量化投资实战。希望对你入门Python爬虫和量化交易有所帮助!

2201_76125261的博客 1781

智能车复工日记【3】:图像处理——基本扫线和基本特征提取和十字补线

目录前言基本扫线(除了进入环岛状态或者坡道或者十字路口的普通扫线)基本数据和初步特征进一步特征提取1、计算并且显示前n行左右线各丢失数目(不break和break的都有)2、计算左右线方差(以右线为例)【a】计算右线曲率(选三个点:r_start、中点、break点)【b】如果右线曲率在一定的范围,就进行右线拟合,从空白行开始计算斜率,否则则从0行开始计算 前言 图像大小185*70,通过扫线获取.........

hanhan的博客 3万+

c++ iterator 失效_C++ STL 迭代器失效问题

之前看《C++ Primier》的时候,也解到在顺序型窗口里insert/erase会涉及到迭代器失效的问题,并没有深究。今天写程序的时候遇到了这个问题。1 莫名其妙的Erase最初我的程序是酱紫的,别说话,我知道这样是有问题的,可这样是最直观的想法int arr[]={0,1,2,3,4,5,6,7,8,9,10};vectora(arr,arr+sizeof(arr)/sizeof(*arr)...

weixin_39997311的博客 208

基于DPCNN实现电商情感分析任务

下载链接项目中使用的模型是DPCNN,在模型中我们定义了三个组件,分别是embedding层,卷积层和全连接层。Embedding层:将每个词生成对应的嵌入向量,就是利用一个连续型向量来表示每个词卷积层:提取语句中的语义信息Linear层:将结果映射成2大小用于二分类,即正反面的概率。

优快云 精品推荐 1629

仔细区别 pointers 和 references

仔细区别 pointers 和 references 参考《More Effective C++》 没有所谓的 null references 一个引用必须总代表某个对象。所以如果有一个变量,其目的是用来指向(代表)另一个对象,但是也有可能他不指向(代表)任何对象,那么你应该使用 pointers,因为你可以将 pointers 设为 null。换句话说,如果一个变量总是代表一个对象,也就是不...

Gerald的博客 368

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

条款1:仔细区别pointers和references

**本文描述pointers和references的差异,并告诉你它们的适当使用时机。**首先必须认知一点,没有所谓的null reference,一个reference必须总代表某个对象。换个角度说,如果这个变量总是必须代表一个对象,也就是如果你的设计并不允许这个变量为null,那么你应该使用reference。先看一种情况:int *pc=0; //将pointer设定为null int& r

Nim的辙迹 710

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

MEC | 条款1 仔细区别pointers和references

因此,reference 一定代表某个对象,而且有初值。因为有初值,所以reference 不需要考虑其有效性,不用判断是否为空。

RandyOliver's House 211

【C++ Basics】 区别pointers和references

reference是一种特殊的pointer。

Zoey的博客 228

条款1:仔细区别Pointers和References

指针和引用看起来很不一样,指针使用*和->操作符,引用则使用.操作符,但是它们似乎做的是类似的事情。         首先,需求确认的是,C++用没有空引用(null reference),一个引用必须总代表某个对象,所以既不能指向null,也不能声明变量时不赋初值,也不能在使用过程中改变指向(其实用引用更贴切)值。如果不能满足上述条件,可以考虑使用指针。         使用引用可能比指针更

江淮猫 848

【M1】仔细区别pointers和references

1、引用必须初始化,而且不能修改指向,这一点和const对象十分相似。 2、引用和指针用法不同,对于引用int& ri = a; rhs是个对象,引用前面加&;对于指针,int* pi = &a; rhs是个对象地址,指针前面加*。注意:引用往往是用指针实现的,从int& ri = a; 可以认为a赋给ri,再取地址。 3、引用是一个对象的别名,不能指向为空,而...

weixin_34014555的博客 90

1.仔细区别POINTERS 和 REFERENCES

没有所谓的null reference:         若有一个变量有可能代表一个对象,也可能不代表任何对象,应该使用pointer;         如果这个变量必须代表一个对象,即不允许这个变量为null,则应该使用reference。         因此,reference必须要有初始化,但pointer就没有此限制(不过,无初始化的pointer风险很高)。

海风林影 953

【More Effective C++ 条款1】仔细区别pointers和references

1)操作符的差别 指针使用“*”和“->”操作符,而引用使用“.”操作符2)初始化的差别 有空指针,但是没有空引用,和const对象一样,引用一旦定义就必须和对象绑定(当然char* pc=0;char& rc=*pc;也合法但无意义)由此造成的影响: 2.1)对于指针的向下转型,如果失败则返回空指针,但由于没有空引用的说法,所以对于引用的向下转型如果失败则会抛异常...

Y先森0.0 246

1.仔细区别pointers 和 references

没有所谓的null reference: 若有一个变量有可能代表一个对象,也可能不代表任何对象,应该使用pointer; 如果这个变量必须代表一个对象,即不允许这个变量为null,则应该使用reference。 因此,reference必须要有初始化,但pointer就没有此限制(不过,无初始化的po...

weixin_30594001的博客 156

More Effective C++ 条款01:仔细区别 pointers 和 references

More_Effective_C++01

君鼎的博客 614

C pointers和Java references 的区别

1.

weixin_34187862的博客 71

More Effective C++ 条款1 仔细区别pointers和references

1. 初始化的区别:有空指针(NULL),但没有空引用,和const变量一样,引用一旦定义就必须和对象绑定。(当然char* pc=0;char& rc=*pc;也合法但无意义) 由此造成的影响: 1) dynamic_cast,对于指针的down_cast,如果失败就返回空指针,但由于没有"空引用"的说法,所以对于引用的down_cast如果失败...

ddzai7557的博客 223

More Effective C++(条款一 仔细区别pointers和references )

1、没有所谓的空引用,但可以有空指针2、引用必须初始化,指针不一定要初始化int &a;//错误,没有初始化 int b=1; int &rb=b;//正确,rb指向b int *p;//未初始化指针,正确,却风险高3、没有所谓的空引用==》引用可能比使用指针更高效,因为使用引用前不用测试其有效性void printDouble(const double& rd) { ...

Unique-You的博客 366
上一篇: Effective C++笔记6
下一篇: Win7下安装jdk和Tomcat
csc_csc_csc
博客等级 码龄15年 169粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值