首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我得到错误:在重载+=操作数之后,二进制表达式的操作数无效?

在重载+=操作符时,二进制表达式的操作数无效的原因可能是因为在重载+=操作符时,没有正确地定义操作数的类型或者没有正确地实现操作数的逻辑。

重载+=操作符是用于实现对象的自增运算,它会将右操作数的值加到左操作数上,并将结果赋给左操作数。在重载+=操作符时,需要确保左操作数和右操作数的类型是兼容的,并且定义了相应的操作。

如果在重载+=操作符之后,二进制表达式的操作数无效,可能是因为以下原因之一:

  1. 类型不匹配:重载+=操作符时,需要确保左操作数和右操作数的类型是兼容的。如果左操作数和右操作数的类型不匹配,编译器会报错。请检查重载+=操作符的参数类型是否正确,并确保左操作数和右操作数的类型匹配。
  2. 操作数未定义:重载+=操作符时,需要确保操作数的类型已经定义,并且实现了相应的操作。如果操作数的类型未定义或者未实现相应的操作,编译器会报错。请检查操作数的类型是否正确定义,并确保实现了相应的操作。
  3. 重载操作未正确实现:重载+=操作符时,需要正确地实现操作数的逻辑。如果重载操作未正确实现,可能会导致二进制表达式的操作数无效。请检查重载+=操作符的实现逻辑是否正确,并确保正确地处理了左操作数和右操作数的值。

总结起来,当在重载+=操作符之后,二进制表达式的操作数无效时,需要检查类型是否匹配、操作数是否定义和重载操作是否正确实现。如果以上都没有问题,可能是其他代码逻辑导致的错误,需要进一步检查代码。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java 大神十个私藏避坑绝技

对于1.10这个数, 计算机只会使用近似的二进制浮点数表示, 产生精度影响. 从上面的例子中来看, 1,10计算机中表示为1.099999, 这个1.10并没有计算机中得到精确表示....这使得计算 x^ =y^ =x^ =y表达式第二个x时候是计算x^ =y之前值( x值依旧是1111 ), 并不是x^=y后值, 这就导致了计算上错误....这是一个出乎意料结果. 思考之后, 将可能得出这样结论: 出现这样问题原因是操作数类型自动提升, char=>int. 但是又有一个问题就是为什么第一个运算不是88....思考: 上面的问题说明了, 条件表达式中, 最后再后两个操作数使用相同类型操作数, 以此避免返回值类型不确定问题, 并且在其他表达式计算中, 一定要理清楚数值之间类型转换. 8.发现隐藏类型转换..., 这样写 'a'+'H' 依旧做 int 数值运算 思考: 使用 "+" 运算符一定要注意操作数类型, 以防止惯性思维导致运算错误.

97120

JavaScript(三)

比较字符串时,实际比较是两个字符串中对应位置每个字符字符编码值。经过这么一番比较之后,再返回一个布尔值。...另一个操作数是数值,比较相等性之前先将字符串转换为数值 如果一个操作数是对象,另一个操作数不是,则调用对象 valueOf() 方法,用得到基本类型值按照前面的规则进行比较 这两个操作符进行比较时则要遵循下列规则...do-while 语句 do-while 语句是一种后测试循环语句,即只有循环体中代码执行之后,才会测试出口条件。...像前面例子中那样赋值会变得无效。也就是说,即使把 arguments[1] 设置为 10,num2 值仍然还是 undefined。...重写 arguments 值会导致语法错误(代码将不会执行)。 没有重载 ECMAScript 函数不能像传统意义上那样实现重载

47720
  • python按位取反_python赋值运算符

    大家好,又见面了,是你们朋友全栈君 Python中~(按位取反)运算理解: 按照平时理解,当我使用~按位取反运算时候,计算机会将操作数所对应二进制表达式每一个位进行取反计算,取反后所得到值就是...~按位取反运算结果(这点没问题) 例如,假如我计算机是32位接下来要计算~5值,计算过程如下: 5 二进制表达式为:0000 0000 0000 0000 0000 0000 0000 0101...1111 1111 1111 1111 1010为什么表示-6,也即理解负数二进制表达方式。...以上便是对~按位取反运算以及负数二进制表示理解,不难发现,求源码时候,要将补码进行取反后再加1,然而这个补码原本就是之前由~运算时,对原来操作数通过~按位取反而得来,所以,此时求该补码源码时取反操作...,相当于将补码变回了原来那个操作数之后进行加1操作就相当于对原来操作数进行加1,只不过结果变成了他相反数。

    85830

    按位取反计算_二进制按位取反怎么算

    (按位取反)运算理解: 按照平时理解,当我使用~按位取反运算时候,计算机会将操作数所对应二进制表达式每一个位进行取反计算,取反后所得到值就是~按位取反运算结果(这点没问题) 例如,假如我计算机是...32位接下来要计算~5值,计算过程如下: 5 二进制表达式为:0000 0000 0000 0000 0000 0000 0000 0101 执行~运算,即~5后: 1111 1111 1111...1111 1111 1111 1111 1010,即结果为-6 以上过程没有任何问题,但我们如果忘记了负数二进制表达方式,那么就会对这个结果产生疑问,为什么1111 1111 1111 1111 1111...以上便是对~按位取反运算以及负数二进制表示理解,不难发现,求源码时候,要将补码进行取反后再加1,然而这个补码原本就是之前由~运算时,对原来操作数通过~按位取反而得来,所以,此时求该补码源码时取反操作...,相当于将补码变回了原来那个操作数之后进行加1操作就相当于对原来操作数进行加1,只不过结果变成了他相反数。

    1K30

    C语言(7)----操作符

    我们知道,计算机中,常用数制是二进制,那么整数中,二进制表示方法有三种,它们分别是:原码 反码 补码 有符号整数表达式包括符号位和数值位,其中最高位也就是最左边那一位是符号位,其他都是数值位。...反码:将原码符号位不变,其他位依次按位取反就可以得到反码。 补码:反码+1就得到补码。 并且负整数中,三码满足如图转换方式,并且需要记住:符号位是不会跟着取反。...但是在编译器上我们输入时候是十进制,计算过程中会自动换算成二进制,计算完之后再以十进制形式输出。 注意:针对位操作符名称来源是具有逻辑原因。...比如按位或为什么叫做按位或可以如此解释:“或”操作符名称来源于逻辑运算中“或”运算。逻辑运算中,“或”运算表示只要有一个条件为真,整个表达式就为真。...对于不同运算符优先级和结合性,可以查表: C 运算符优先级 - cppreference.com 4.表达式求值 了解操作符分类之后,我们就需要把操作符代入到表达式中了。

    10610

    【C语言】操作符还能这样?

    我们来看另一个题目: 求一个整数存储在内存中二进制中1个数 赋值操作符 比较简单,简单来说,就是可以对变量进行赋值 除此之外,赋值操作符可以连续使用,比如: 不过,可不能这样子赋值,避免出错:...同样,有些表达式操作数求值过程中可能需要转换为其他类型。 隐式类型转换 C整型算术运算总是至少以缺省整型类型精度来进行。...为了获得这个精度,表达式字符和短整型操作数使用之前被转换为普通整型,这种转换称为整型提升。...因此,即使两个char类型相加,CPU执行时实际上也要先转换为CPU内整型操作数标准长 度。...整型提升是按照变量数据类型符号位来提升 我们来看个例子: 为什么输出结果是c呢❓ 答:a,b要进行整形提升,但是c不需要整形提升 a,b整形提升之后,变成了负数,所以表达式 a= , b 结果是假

    80030

    【C语言总集篇】操作符篇——从不会到会过程

    我们可以来验证一下: 现在我们从这些测试结果中就能得到结论: 自赋值操作符是将左操作数与右操作数这个整体进行运算之后再赋值给自己; 所以希望大家使用自赋值操作符时一定要先判断此时自赋值对象是不是需要与右操作数这个整体进行运算...: 两个操作数时,就是算术加法和算术减法; 一个操作数时,就是正号和负号; 多种含义操作符中取地址与解引用是我们要介绍重点对象,因为我们之后指针篇章学习中,会经常遇到它们两个。...,它们也是属于同类型操作对象; 当我们像这个例子中一样,定义同类型变量时,用逗号表达式隔开后第二个表达式继续带上数据类型,或者定义不同类型时直接用逗号表达式隔开,系统都会报错,报错错误提示我们可以看到一个是...char和int两个不同类型;简单了解了结构体之后,我们继续来解答下一个问题; 4.2 为什么结构体成员操作符有两个?...下面就来解释一下为什么会出现这个结果; 简单理解就是,字符进行整型运算时,只是将字节大小提升成了int字节大小后,再按正常int类型进行运算,所以我们可以看到当a=1,b=2或者a=1,b=126

    31110

    NASM语法

    一个具体文件格式完整可使用调试文件格式列表可通过命令'nasm -f -y' 来得到。 这个选项缺省状态下没有被构建时NASM 。...因为NASM 常把它警告和错误信息输出到标准错误设备,这将导致你文本编 辑器里面很难捕捉到它们。...对于浮点指令,NASM 接受各种语法:你可以使用MASM 支持操作数形式,或者你 可以使用NASM 大多数情况下全用操作数形式。支持所以指令语法 细节可以参阅附录B。...或类似的东西:现在我们所描述正是NASM 自己方式。 'RESB'类伪指令操作数是有严格语法,参阅3.8。 3.2.3 `INCBIN':包含其他二进制文件。...这也不是一个预自理定义: 'msglen'值只被计算一次,计算中使用到了'$'(参阅3.5)在此时含义。注意 ‘EQU’操作数也是一个严格语法表达式

    2K20

    编辑器对内存使用——数据保存与访问使用(整形篇)

    ,这样便做到了用不同类型密钥来分辨电脑中都是二进制分类储存 此时我们就能理解为什么在给变量定义时要写变量类型(告诉编辑器要使用对应密钥),也能够理解为什么当我们用不同类型去定义和访问同一个变量时...为什么呢? 计算机系统中,数值一律用补码来表示和存储。...为了获得这个精度,表达式字符和短整型操作数使用之前被转换为普通整型,这种转换称为整型提升。...因此,即使两个char类型相加,CPU执行时实际上也要先转换为CPU内整型操作数标准长度。...,但是c不需要整形提升a,b整形提升之后,变成了负数,所以表达式 a==0xb6 , b==0xb600 结果是假,但是c不发生整形提升,则表达式 c==0xb6000000 结果是真.

    39730

    抽丝剥茧C语言(中阶)操作符+练习

    返回是整除之后余数。 2. 移位操作符 这两个操作符是关于二进制问题。 << 左移操作符 >> 右移操作符 注:移位操作符操作数只能是整数。...同样,有些表达式操作数求值过程中可能需要转换为其他类型。 11.1 隐式类型转换 C整型算术运算总是至少以缺省整型类型精度来进行。...为了获得这个精度,表达式字符和短整型操作数使用之前被转换为普通整型,这种转换称为整型提升。...,同上,操作符优先级只能决定自减–运算在+运算前面,但是我们并没有办法得知,+操作符操作数获取操作数之前还是之后求值,所以结果是不可预测,是有歧义。...总结:我们写出表达式如果不能通过操作符属性确定唯一计算路径,那这个表达式就是存在问题。 结束语 家人们请点个赞,路过大佬指点错误和不足!!!

    58000

    【C语言】室友看了这操作符,连王者都不准备打 |

    注意:表达式内部,作为运算符一部分,两者用法可能有所不同。...如果运算符放在变量前面,那么变量参加表达式运算之前完成自增或者自减运算;如果运算符放在变量后面,那么变量自增或者自减运算符变量参加了表达式运算之后完成。...返回针织还是假值,取决于表达式当中所用运算符。其中真值为二进制(1),假值为二进制(0),针织表示指定关系成立,假值则表达式指定关系不成立。...形式参数是指函数名后括号中变量,因为形式参数只有函数被调用过程中才实例化(分配内存单元)调用一瞬间才会开辟内存空间,所以叫做形式参数。形式参数当函数调用完成之后就会自动销毁了。...当时还不明白这个是为什么,结果一看,原来是优先级问题 注意:在这里 + 优先级比 *= 优先级高!当然上面的代码其实本身并不好,因为没有可读性。

    55620

    千万别小看这些运算符背后逻辑

    原创@飞白 前言 最近回顾javascript一些基础知识点时,引起思考确实颠覆了之前一些认知。清楚地记得曾多次在网上看到一些奇奇怪怪表达式,它们运算结果着实让人懵逼。...位运算符都是二进制运算,并且是基于32位整数运算。所以十进制,十六进制操作数都会先转为32位二进制后再进行运算。...移位运算符 复习到移位运算符这块时,不由得提出了一个疑问:“javascript中为什么没有无符号左移运算符?”要解答这样一个疑问,首先还是要看看左移和右移分别是怎么运算。...var a = -1; a >> 2; // -1 // 如果用负数补码形式进行算术右移,高位补1 如果你自己写几个右移运算表达式做试验,你就会产生一个疑惑,为什么有的正数带符号右移后却变成了负数...个人想法是,应该是要回到移位运算本质。 二进制表示机器数相对于小数点作n位左移或右移时,其实质就是该数乘以或除以2n(n=1,2, …, n)。

    74930

    c语言从入门到实战——操作符详解

    正整数原、反、补码都相同。 负整数三种表示方法各不相同。 原码:直接将数值按照正负数形式翻译成二进制得到就是原码。 反码:将原码符号位不变,其他位依次按位取反就可以得到反码。...补码:反码+1就得到补码。 反码得到原码也是可以使用:取反,+1操作。 对于整形来说:数据存放内存中其实存放是补码。 计算机系统中,数值一律用补码来表示和存储。...例如: int a = 10; // a 二进制表示为 0000 1010 int b = ~a; // b 二进制表示为 1111 0101 注意,进行按位取反时,要将操作数转换为二进制形式,并将符号位也一起取反...表达式求值 11.1 整型提升 C语言中整型算术运算总是至少以缺省整型类型精度来进行。 为了获得这个精度,表达式字符和短整型操作数使用之前被转换为普通整型,这种转换称为整型提升。...操作符操作数获取操作数之前还是之后求值,所以结果是不可预测,是有歧义

    12210

    C语言详解(四) - 操作符

    如 int类型整数10二进制形式是1010,int在内存中假设占32个bit位,则补二进制位 00000000 00000000 00000000 00001010,得到int型整数10原码,同时也是反码...2.2.2 负整数 符号位:负数最高位是符号位,默认为1。 反码:符号位不变,其它位按位取反得到二进制数。取反:0->1,1->0; 补码:反码二进制数+1得到二进制数。...考虑32个位按位逐个检查,借助1,其在内存中补码为00000000 00000000 00000000 00000001,1与一个整数按位与之后得到结果32个位只有最低位可能为1,其他位由于都是0...对于||,当两个操作数都为假时,表达式结果才为假(0),其他情况均为真(0)。 这里操作数可以使复杂表达式。...所以对于运算中低于CPU内整型操作数标准长度情况,要先转换为CPU内整型操作数标准长度进行计算。

    36610

    计算机初级选手成长历程——操作符详解(3)

    下面就来解释一下为什么会出现这个结果; 简单理解就是,字符进行整型运算时,只是将字节大小提升成了int字节大小后,再按正常int类型进行运算,所以我们可以看到当a=1,b=2或者a=1,b=126...127来查看127二进制形式: 可以看到127二进制形式为01111111,它实际计算机内存中二进制序列为: 00000000000000000000000001111111 这个二进制序列也就是有符号整数...*lf这种格式来打印,这里*代表是精度。我们赋值时给d和e赋值是两位小数,所以这里通过%.2lf这种格式来打印,也能得到正常值105.72。...,结果上就会产生出入; 表达式二——c + --c 这个表达式同上,我们只能根据操作符优先级来确定前置--+之前进行运算,但是无法确定+操作数获取是在前置--之前还是之后,比如: int c...,就能得到值为10,这样我们表达式就没有歧义了。

    22910

    【C】操作符详解

    而只要有浮点数执行就是浮点数除法。 % 操作符两个操作数必须为整数。返回是整除之后余数。 3....表达式求值 表达式求值顺序一部分是由操作符优先级和结合性决定。 同样,有些表达式操作数求值过程中可能需要转换为其他类型。...12.1 隐式类型转换 C整型算术运算总是至少以缺省整型类型精度来进行。 为了获得这个精度,表达式字符和短整型操作数使用之前被转换为普通整型,这种转换称为整型提升。...2 c + --c; 注释:同上,操作符优先级只能决定自减–运算在+运算前面,但是我们并没有办法得知,+操作符操作数获取操作数之前还是之后求值,所以结果是不可预测,是有歧义...: VS2013环境结果: 看看同样代码产生了不同结果,这是为什么

    21920

    C++面向对象学习之运算符重载(1)

    运算符重载 1.为什么要进行运算符重载? 2....1.为什么要进行运算符重载?...这里给出大致解答: 如果将运算符重载函数作为成员函数,它可以 通过 this指针自由地访问本类数据成员,因此可以少写一个函数参数。 但 必须要求运算表达式第一个参数(即运算符左侧操作数)是一个类对象...,要求使用重载运算符时运算符左侧操作数是整 型量(如表达式 i+c2,运算符左侧操作数 i 是整数),这时是无法利用前面定义 重载运算符,因为无法调用 i.operator+函数。 可想而知,..., 不能省略,形参顺序任意,不要求第一个参数必须为类对象。 但在使用运算 符表达式中,要求运算符左侧操作数与函数第一个参数对应,运算符右侧 操作数与函数第二个参数对应。 如 c3=i+c2;

    84130

    PHP 中操作符重载

    幸运是,我们可以通过 PHP 扩展中编写一些简单逻辑来实现操作符重载,而无需修改 PHP 本身源码。...MUL $b, -1, ~0 # 转换为乘法操作,乘以 -1 IS_SMALLER ~0, $a, ~1 # 调换操作符位置,并转换为小于比较 ASSIGN $c, ~1 之后章节...如果操作数是一个字面量 , 则其类型为 IS_CONST. 如果操作数是一个由表达式返回临时变量 , 则其类型为 IS_TMP_VAR....如果操作数是一个在编译期被确定变量,则其类型为 IS_CV. 如果操作数是一个由表达式返回在编译期被确定变量,则其类型为 IS_VAR. 通过使用调试工具,可以有助于我们理解操作数类型。...操作符重载实现细节 我们现已知道,通过自定义操作码处理函数,可以实现操作符重载。下面我们将讨论一些实现细节,从而帮助大家减少开发过程中踩坑。

    1.5K30

    【C++】运算符重载 ⑭ ( 逻辑与 && 运算符重载 | 逻辑或 || 运算符重载 | 完整代码示例 )

    其 内部 内置了 短路 规则 , 也就是 前面的 逻辑与 && 运算 , 只要得到 false 结果 , 那么后续逻辑与运算也没要运行 , 整个表达式结果都是 false ; 前面的 逻辑或 ||...运算 , 只要得到 true 结果 , 那么后续逻辑或运算也没要运行 , 整个表达式结果都是 true ; C++ 函数实现 , 无法实现短路规则 ; 因此 一般情况下 , 不实现 逻辑与 和 逻辑或..., 参数一般都是 对象引用 ; 括号运算符 使用时用法为 s1 && s2 ; 左操作数 : 其中 左操作数 是 s , 这里通过 this 指针调用 , 不需要声明参数中 ; 若干右操作数...: 右操作数 也是 Student 对象 ; 该操作数需要声明参数中 , 注意 普通数据类型 直接声明 , 对象数据类型 需要声明 为 引用类型 ; 上述两个是对象类型 , 对象一般传入 指针 或 引用...对象引用 ; 括号运算符 使用时用法为 s1 || s2 ; 左操作数 : 其中 左操作数 是 s , 这里通过 this 指针调用 , 不需要声明参数中 ; 若干右操作数 : 右操作数 也是

    16110
    领券