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

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

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

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

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

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

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

相关搜索:二进制表达式的操作数无效错误使用重载运算符的二进制表达式的操作数无效打印向量值时,二进制表达式的操作数无效错误为什么我会得到这个错误?错误:'int‘和'int(int,int)’类型的操作数对于二进制'operator/‘无效错误:二进制浮点数的操作数无效(具有‘>>’和'int')二进制表达式的操作数无效(同时使用两个重载运算符时)C++无效的操作数到二进制表达式('IOperand *‘和'IOperand *')如何将“二进制表达式的无效操作数"class”修复为"class"“错误(repl.it)vector::erase失败,二进制表达式(T和const T)的操作数无效错误: c++中'float‘和'int’类型的操作数对二进制'operator%‘无效为什么我得到的是TypeError:-不支持的操作数类型:'str‘和'int’为什么我得到的是TypeError: /:'str‘和'int’不支持的操作数类型?为什么我在pytorch中得到RuntimeError: CUDA错误:无效参数?为什么我得到无效的语法easy_install错误?为什么我得到一个对象无效的错误?为什么我在带有等待表达式的mypy中得到无效语法?C++错误:[二进制表达式('std::map<int,std::function<void ()>,std::less<int>...]的操作数无效错误:'const char*‘和'const char*’类型的操作数对于二进制文件'operator+‘无效在我的sql查询中,操作数应包含1列错误二进制表达式“` `const Foo`和``const Foo`”的操作数无效,没有匹配的排序调用
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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 的数值运算 思考: 在使用 "+" 运算符一定要注意操作数的类型, 以防止惯性思维导致的运算错误.

98920

JavaScript(三)

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

48620
  • c语言操作符万字超详解

    二进制转十进制 10进制的123表示的值是一百二十三,为什么是这个值呢?...那么从原码得到补码的方式就是取反加一。 从补码得到原码的方式就是加一取反,但实际上由于是二进制,所以对补码取反加一也能得到原码。 对于整形来说:数据存放内存中其实存放的是补码。 为什么呢?...(这也就是文末的大部分错误表达式的错误原因) 标准自身并未指定优先级。它们是从文法中导出的。...一些错误的表达式 表达式一 a * b + c * d + e * f 表达式1在计算的时候,由于*的优先级比+高只能保证 * 的运算比+早,但是优先级并不 能决定第三个 * 比第一个+早执行。...表达式二 c + --c; 同上,操作符的优先级只能决定自减 – 的运算在 +的运算的前面,但是我们并没有办法得知,+ 操作符的左操作数的获取在右操作数之前还是之后求值,所以结果是不可预测的,是有歧义的

    17910

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

    (按位取反)运算的理解: 按照我平时的理解,当我使用~按位取反运算的时候,计算机会将操作数所对应的二进制表达式的每一个位进行取反计算,取反后所得到的值就是~按位取反的运算结果(这点没问题) 例如,假如我的计算机是...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

    python按位取反_python赋值运算符

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

    88930

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

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

    11910

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

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

    81130

    【C语言】操作符超详细总结

    2.1 2进制转10进制 其实10进制的123表⽰的值是一百二十三,为什么是这个值呢?...个2进制位就足够了,比如f的二进制是1111,所以在2进制转16进制数的时候,从2进制序列中右边低位开始向左每4个2进制位会换算⼀个16进制位,剩余不够4个二进制位的直接换算。...补码:反码+1就得到补码。 补码得到原码也是可以使用:取反,+1的操作。 对于整形来说:数据存放内存中其实存放的是补码。 在计算机系统中,数值⼀律用补码来表示和存储。...为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整 型提升。...因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准⻓ 度。

    7710

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

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

    37610

    NASM语法

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

    2K20

    【c语言】运算符汇总(万字解析)

    这说明得到两个数相加的结果。 - -也有两个操作数,运算得到两个数相减的结果。像这样有两个操作数的操作符,我们将其统称为双目操作符。...如果说两个操作数均为整形,则得到的结果也为整形(实际可能算出小数,结果向下取整)。...既然它们是数值的不同表示形式,那么就可以相互转换: 二进制转十进制 对于十进制数字123,首先我们需要知道,为什么它是123。这是一个三位数,它的每一位都是有权重的。...补码:源码+1得到补码。 整数的存储方式:一律以补码的形式存储。 在掌握了这些基础知识之后,我们将正式深入探讨位运算符。...三、运算符的优先级和结合性 在介绍完了这么多运算符之后,我们来讲解运算符的优先级和结合性。运算符的优先级和结合性决定了表达式求值时的计算顺序。 1.

    60410

    操作符详解

    . % 操作符的两个操作数必须为整数。返回的是整除之后的余数。 3....表达式求值 表达式求值的顺序一部分是由操作符的优先级和结合性决定。 同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型。...为了获得这个精度,表达式中的 字符 和 短整型 操作数在使用之前被转换为普通整型,这种转换称为 整型 提升 。...因此,即使两个 char 类型的相加,在 CPU 执行时实际上也要先转换为 CPU 内整型操作数的标准长 度。...c + -- c ; 注释:同上,操作符的优先级只能决定自减 -- 的运算在 + 的运算的前面,但是我们并没有办法得 知, + 操作符的左操作数的获取在右操作数之前还是之后求值,所以结果是不可预测的

    10810

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

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

    41430

    物联网工程师技术之C语言运算符

    经过本章的学习之后,大家就可以编写一些简单的小程序了。 3.1 运算符与表达式 在C语言中,表达式是一种有值的语法结构,它是由变量、常量和有返回值的函数调用组合这几种基本元素而成的。...为什么会有“变量值”这一说法呢?应当注意的是,一个变量在不同时刻可以对应多个不同的值,这意味着“变量”和“变量值”并不是一一对应的关系。...很遗憾,类似例程3-3中的语句在C语言中是无效的: 例程 32 无效的赋值语句 variable1, variable2 = 45, 60; 第一条语句的含义是“将variable的值赋给常量20 +...同样也无法在“+”的上下左右放上多个操作数以构成合法的表达式。下文中的乘法运算符和除法运算符同样是双目运算符。...\n"); } 图 36 “减肥小助手”的错误输出 “咦?”小伙伴迷惑不解,“为什么计算出的平均值都是0.000000啊?难道电脑算错了?”电脑当然不会算错,问题一定出在他的程序里。

    7410

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

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

    59000

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

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

    56820

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

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

    75930

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

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

    16610

    【C语言】操作符

    正整数的原、反、补码都相同。 负整数的三种表示方法各不相同。 原码:直接将数值按照正负数的形式翻译成而进制得到的就是原码。 反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。...补码:反码+1就得到补码。 对于整形来说:数据存放内存中其实存放的是补码。 为什么呢? 在计算机系统中,数值一律用补码来表示和存储。...表达式求值 8.1 整型提升 C语言中整型算术运算总是至少以缺省整型类型的精度来进行的。 为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。...因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。...c2 = 1; 变量c2的二进制位(补码)中只有8个比特位: 00000001 因为 char 为有符号的 char 所以整形提升的时候,高位补充符号位,即为0 提升之后的结果是: 00000000000000000000000000000001

    10510
    领券