读C++标准系列 - 5.6~5.15 双目运算符(指针运算)

C# 一步一步完成一个简单的计算器 第三步---实现双目运算 实现双目运算是这个系列中难道较大的,基本都是在写代码,在一些函数中相互调用,修改变量,可能比较绕, 1.首先打开代码文本,在类的里面 声明几个变量 private bool isFirstInput = true; //是否第一次输入 private string lastVal= ""; //双目运算的前一个数 priv 阅读详情
返回目录

5.7 + -
对于涉及指针的算术运算,标准中有比较严格的限制条件:
参与运算的指针必须指向数组对象中的元素,或者指向数组对象最后一个元素的下一个元素(这是STL中能够使用distance(v.begin(),v.end())计算元素个数的前提条件)。
(注:对于指向普通对象的指针,可以将该对象当成长度为1的数组中的元素)(5.7-4)
否则,会导致未定义的行为。

指针加减一个整型类型,相当于对指针对应的数组元素的下标进行加减操作。
如果数组有N个元素,只要计算得到的下标在[0,N]之间,结果都是有效的,而且保证不会溢出,否则结果是未定义的。(5.7-5)

两个指针相减,相当于对两个指针对应的数组元素的下标相减(5.7-6)
结果的类型是std::ptrdiff_t(在<cstddef>头文件中)。ptrdiff_t具体是什么类型是实现相关的,不过必然是有符号整型。
如果相减的结果溢出,那么会导致未定义的行为。

对指针进行+0或者-0的操作不会对指针的值产生影响。(5.7-7)
如果两个指针指向数组对象中的同一个元素,或者都是NULL,那么两者相减将得到0

5.9~5.10 < > == !=
因为只有指向相同类型的指针才能够进行比较,所以当指针参与比较运算的时候,会进行默认的指针类型转换(0->(T *)0,T *->void *,Derived *->Base *,T *->T const *等等)(4.10&4.4),以使两者的类型一致。

void *p;
const int *q;
int **pi;
const int *const *pci;
p <= q; // both converted to const void * before comparison
pi <= pci; // both converted to const int * const * before comparison

指针比较遵循以下的原则:

1、如果两者都是NULL,则相等
2、如果仅其中之一是NULL,则不相等
3、如果两个指针满足前面指针的算术运算的要求,那么比较的结果取决于它们指向元素的下标
4、如果两个成员函数指针对应同一个对象的同一个函数(不能是虚函数),那么两者相等
(在下面的例子中,pdl指向的对象是L的基类B,pdr指向的对象是R的基类B,两个对象并不不同,所以返回false:
struct B {
    int f();
};
struct L : B { };
struct R : B { };
struct D : L, R { };

void Test()
{
    int (B::*pb)() = &B::f;
    int (L::*pl)() = pb;
    int (R::*pr)() = pb;
    int (D::*pdl)() = pl;
    int (D::*pdr)() = pr;
    bool x = (pdl == pdr); // false
}
)
5、如果两个指针指向同一个对象(非union)的非静态成员变量,那么它们的大小关系取决于它们声明的顺序
(注:必须是在同一个访问权限标识符下,否则标准没有规定返回值
(换句话说,对于在不同访问权限标识符中定义的变量,具体的实现有权自由安排它们的顺序。这点需要额外小心,特别是在构造函数的初始化列表中使用这些成员时)
在下例中,a必然在b的前面,而c和a、b的位置关系则取决于具体的实现:
public A
{
    int a;
    int b;
private:
    int c;
};
)
6、如果两个指针指向同一个union中的成员变量,那么两者是相等的
7、对于其它情况,标准没有规定比较的结果
一元运算符“-“一定要和变量名连在一起吗?运算符优先级有没有通用原则?为什么两个操作数的一个是char/short或者枚举类型,会自动转换成int类型?隐式/显式类型转换?二元运算符的操作数? 一个小于int长度的数值,就算在硬件寄存器里面,最自然也是int长度,那就不如用int来计算,避免中间各种裁剪导致额外性能消耗。微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。 阅读详情

相关推荐

C++运算符优先级与结合性详解:从基础规则到实战避坑指南

在编程语言中,运算符是构建表达式和程序逻辑的基础元素,其执行顺序由优先级和结合性规则决定。理解这些规则是编写正确、高效代码的关键,它们直接影响表达式的求值结果和程序行为。从技术价值看,掌握运算符规则能有效避免常见的编码错误,如赋值与比较混淆、整数溢出、未定义行为等,提升代码的健壮性和可维护性。在实际应用场景中,无论是进行条件判断、循环控制、数值计算,还是底层位操作,都需要清晰理解运算符的运作机制。本文聚焦于C++中的运算符优先级与结合性,通过解析算术运算符、关系逻辑运算符、赋值运算符等核心概念,并结合短路求

weixin_34357887的博客 417

c++双目运算符详解

本文将深入探讨C++中的双目运算符,详细介绍双目运算符的种类、使用方法以及常见的应用场景,并附带代码示例,帮助读者更好地理解和应用双目运算符。本文详细介绍了常见的双目运算符的种类、使用方法以及应用场景,并提供了相关的代码示例。希望读者通过学习双目运算符的使用,能够更好地应用于实际编程中,提高程序的效率和质量。C++中的双目运算符有多种类型,包括算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符等。双目运算符可以应用于各种不同的场景,下面我们介绍一些常见的应用示例。

浪子回头 3716

C语言的一些概念性问题汇总

C语言的知识梳理1.关于基本整型的字节问题(int型)2.常见的ASCII码3.C语言运算符优先级4.有关数据输入输出的概念 1.关于基本整型的字节问题(int型) 编译系统分给int型数据2个或者4个字节(由具体的C编译系统自行决定 其中Turbo C 2.0系统为每个整形数据分配2个字节额 Visual C++为每个数据分配4个字节 2.常见的ASCII码 空格的ASCII码值为32; 数字0...

Doyle_的博客 1443

单目运算符,双目运算符,三目运算符

一、单目运算符: 自加:++ 自减:– 取反:~ 二、双目运算符 按位与:& 按位或:| 按位异或:^ 左移:<< 右移:>> 三、三目运算符 三目运算符,又称条件运算符; 例如:int a = 2,c = 3; int b = (a > c) ? a : c; cout << “b:” << b << endl; ...

weixin_42615026的博客 1万+

利用eds editor生成CANOPEN 设备eds文件

通过以上步骤,您可以根据实际设备的功能特性,自动生成一份符合CANopen协议标准的电子数据表(EDS文件),该文件可以被上位机软件或其他CANopen主站设备用于识别、配置和控制您的CANopen从站设备。使用CANopen EDS Editor生成CANOPEN设备的EDS文件是一个系统化的过程,它涉及将设备的具体技术参数和功能映射到CANopen规范定义的对象字典中。

weixin_38604759的博客 6458

vivado下ECO操作-不重新综合实现修改属性并生成.bit

ECO即engineer change order,即工程变更指令,可以对设计做局部小改动并只对改动部分重新布局布线并生成.bit。在一个工程动辄编译几个小时情况下,可以在调试中节省大量时间。比如我们在调试中,需要改变时钟占空比或者相位,需要改变寄存器初值等等,此时用ECO暂时改动,待验证后在重新编译无疑是最有效率的方法。 实现ECO通常有两种方式,一是通过vivado界面完成,另一种方法就是tcl脚本。所有的ECO操作都可以通过tcl操作完成,有的操作用vivado界面无法完成,只能通过tcl。以下主要

4656

C++重载双目运算符

所以,对于“>”运算符,其左操作数是 String 对象,那么,也可以把这个重载运算符函数定义为my_string类的一个成员函数。运算符“>”重载成功,既然对运算符“>”的重载成功了,其他两个运算符的重载也是如法炮制即可。定义一个字符串类 String,用来存放不定长的字符串,重载运算符“==”,“”,用于两个字符串的等于,小于和大于的比较运算。定义的这个重载运算符函数,不是类的一个成员函数,所以,为了能够操作类的私有成员,在上面的my_string类中声明为友元函数。编写和调试都比较容易。

LC的专栏 2084

SRA数据下载的一个坑

SRA数据真坑啊!

xuzhougeng blog 3508

1.6C++双目运算符重载

C++双目运算符重载,C++中的双目运算符重载指的是重载二元运算符,即有两个操作数的运算符,如加减乘除运算符“+”、“-”、“*”和“/”等。

小鱼仙倌的博客 1133

Windows Server安装Intel I219-V网卡驱动完整教程

在Windows Server系统上安装Intel I219-V网卡驱动的方法。

小白成长历程 5171

CS5523实战:如何用国产芯片完美替代LT8911设计MIPI转eDP电路(附原理图)

本文详细介绍了使用国产芯片CS5523完美替代LT8911进行MIPI转eDP电路设计的实战经验。文章从芯片选型、核心特性对比入手,深入剖析了电源时钟设计、MIPI/eDP接口的PCB布局与信号完整性要点,并提供了完整的原理图参考和调试排错指南,为硬件工程师实现国产化替代提供了清晰可行的方案。

yhn4567890的博客 1138

读C++标准系列 - 序言

闲暇之余读读C++的标准也是一件很有意思的事情, 我们可以在C++标准委员会的官方网站(http://www.open-std.org/jtc1/sc22/wg21/)下载C++0X标准的草案。目前最新的版本是2008.6.27发布的n2691.pdfISO/IEC 14882: Programming Language C++ - draft ISO/IEC TR 19768: C+

Van's House 2437

WorkBuddy结合DeepSeek与Skill:文献检索自动化与Token成本控制实战

Agent工具与大模型API的结合正重塑知识工作者的日常流程。在实际工程中,调用大模型处理批量任务常面临Token消耗过快、成本不可控的痛点,而国产大模型DeepSeek以极低的API定价和兼容OpenAI接口的特性,为规模化文本处理提供了“Token自由”的可能。同时,可复用的Skill机制能够将特定领域的工作流固化为标准化步骤,让Agent自动执行检索式生成、文献筛选与摘要归纳等复杂操作。本文从这一技术背景出发,以科研文献检索为应用场景,演示如何利用WorkBuddy、DeepSeek API与自建文献

weixin_29061509的博客 483

C++运算符分类详解:单目、双目、三目运算符的核心原理与实战避坑指南

运算符是编程语言中用于执行运算或操作的基本符号,是构建程序逻辑的基石。其工作原理基于操作数的数量和类型,决定了表达式的求值顺序和最终结果。深入理解运算符的分类与特性,对于编写正确、高效且易于维护的代码具有至关重要的技术价值,它直接影响到算法实现、系统性能以及代码的可读性。在C++、Java、Python等主流语言的开发实践中,无论是进行基础的算术运算、逻辑判断,还是实现复杂的数据处理和算法优化,运算符都是不可或缺的核心工具。本文聚焦于C++中的**运算符分类**,特别是**单目运算符**和**双目运算符**

weixin_34101229的博客 397

【Unity报错】Unity导入海康SDK 报错 DllNotFoundException: PlayCtrl assembly

2.尝试按网上其他的办法(包括使用depengs查看dll依赖等)1.先检查Plugins文件夹中是否存在PlayCtrl文件。3.如果网上查阅的办法都不能解决,请继续往下看。更换低版本的SDK库文件。

weixin_42968584的博客 1126

告别臃肿!保姆级教程:用NTLite深度精简Win10,打造你的专属纯净系统(附完整组件移除清单)

本文提供了一份详细的NTLite教程,帮助用户深度精简Windows10系统,移除冗余组件并优化性能。从准备工作到组件移除清单,再到系统配置优化和无人值守安装,逐步指导用户打造专属纯净系统。附完整组件移除清单和实战经验,确保系统稳定高效运行。

weixin_30945039的博客 851

[C++高频精进] 语法与数据结构:运算符与表达式

本文摘要:C++运算符特性解析 逻辑运算符:&&和||具有短路特性,当左操作数已确定结果时,右操作数不会执行 逗号运算符:从左到右依次执行各表达式,返回最右表达式的值,优先级最低 右结合运算符:包括赋值运算符(=)、条件运算符(?:)和单目运算符,优先级相同时从右向左计算 注意事项:避免在可能短路的右侧放置重要操作,区分逗号运算符与其他语法中的逗号,理解运算符优先级和结合性对表达式求值的影响

D_evil__的博客 1346

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

《C++》基础入门_13——运算符的重载

多态基本概念 多态性是面向对象程序设计的重要特征之一。 多态性是指发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为。 多态的实现: 函数重载 运算符重载 虚函数 运算符重载的实质 运算符重载是对已有的运算符赋予多重含义 必要性 C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类) 实现机制 将指定的运算表达式转化为对运算符函数的调用,运算...

WaitFoF 669

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C语言中的运算符及其优先级

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34138255的博客 88

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

c语言 t和 n的区别6,C语言的一些概念性问题汇总

C语言的知识梳理1.关于基本整型的字节问题(int型)2.常见的ASCII码3.C语言运算符优先级4.有关数据输入输出的概念5.n . c语言中 fabs(t)<=1e-66.break和continue的比较1.关于基本整型的字节问题(int型)编译系统分给int型数据2个或者4个字节(由具体的C编译系统自行决定其中Turbo C 2.0系统为每个整形数据分配2个字节额 Visual C+...

weixin_30666313的博客 752

c语言的 =结合性,c语言优先级和结合性

C语言的运算符众多,具有不同的优先级和结合性,我们将它们全部列了出来,方便大家对比和记忆:优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右()圆括号(表达式)/函数名(形参表).成员选择(对象)对象.成员名->成员选择(指针)对象指针->成员名2-负号运算符-表达式右到左单目运算符(类型)强制类型转换(数据类型)表达式++自增运算符++变量名/变量名+...

weixin_39682673的博客 790

C语言系列之——(5)操作符(含三目表达式和逗号表达式)

本文系统介绍C++中算术操作符的底层二进制计算原理,涵盖加减乘除取余运算。重点说明整数补码表示、加减法的三步流程(转补码→进位削位→转原码),乘法通过移位与累加实现,除法采用逐位确定商与余数的方法,并强调负数符号由异或决定。同时指出浮点数因二进制表示限制存在精度误差,建议小数运算转为整数处理。最后讲解有符号整型溢出为未定义行为,需避免依赖溢出结果,提出通过最高位与次高位进位判断是否溢出。

progressive_bird的博客 174

C++学习笔记(一)——C语言基础知识

一、易忘点 1.输出字符用putchar(ch),输出字符串用printf()。二者功能不可互相替代。 2.目前接触的基本都是静态数组,即声明方式为a[10]之类。与动态数组声明方式不同。静态数组可以修改数组的数据。 3. %X:以十六进制数形式输出整数。 %c:单个字符 %d:十进制整数 %f :十进制浮点数 %o:八进制数 %s :字符串 %u:无符号十进制数 %%:输出...

qq_45812711的博客 2203

C++重点知识梳理(二) ----- 语法问题

二、语法问题 2.1 a++ 与 ++a的区别 a++ 返回加之前的值,++a返回加之后的a变量 a++返回的是一个临时变量,是右值,无法赋值;++a返回的是变量a,是左值 2.2 switch语句 switch语句的表达式必须是整型int , char, short等。 2.3 函数调用过程 http://www.cnblogs.com/biyeymyhjob/archive/201...

weixin_39781267的博客 293

笔试错题集(1)

新的一学期就这样悄无声息的开始了。这个学期除了上课还有一项重要的事情就是找工作,所以要静下心来好好准备准备,这几天为这学期的学习环境纠结,究竟是去图书馆的实验室还是呆在宿舍学习好。走了一圈内环边走边想,觉得我不应该为该在哪里学习而焦头,在哪里学习最关键的都是一颗安静的心,我不能老是习惯把自己的效率低的原因推到周围的环境,更多的是要对自身的思考。不管在哪里只要能让自己静下心来做事,这里就是...

weixin_30342827的博客 124
上一篇: C++ Internals: 序言
下一篇: 汉之云的“免CD”,盗版商的胜利?
vbvan
博客等级 码龄19年 132粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值