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

没有运算符=匹配这些操作数c++,即使所述运算符已被重载

在C++中,运算符重载是一种特性,它允许我们为自定义类型定义运算符的行为。然而,并没有一个运算符可以直接匹配这些操作数。

在C++中,运算符重载是通过定义特殊的成员函数或全局函数来实现的。这些函数使用关键字"operator"后面跟着要重载的运算符符号。例如,要重载"+"运算符,可以定义一个名为"operator+"的函数。

然而,C++并没有提供一个运算符可以直接匹配任意类型的操作数。每个运算符都有一组可接受的操作数类型,这些类型由C++语言规范定义。如果我们想要使用一个运算符来操作自定义类型,我们需要重载相应的运算符函数来定义操作的行为。

对于给定的操作数类型,C++编译器会根据运算符的重载函数来选择正确的操作。如果没有定义适当的运算符重载函数,编译器将无法匹配运算符和操作数,从而导致编译错误。

总结起来,C++中没有一个运算符可以直接匹配这些操作数,但我们可以通过运算符重载来定义自定义类型的运算符行为。要重载运算符,我们需要定义相应的运算符重载函数,并根据操作数类型来选择正确的操作。

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

相关·内容

C++ 运算符重载

C++运算符重载的概念和原理 2. C++重载=(C++重载赋值运算符) 3. C++深拷贝和浅拷贝(C++深复制和浅复制) 4. C++运算符重载为友元函数 5....2 C++重载=(C++重载赋值运算符)  赋值运算符=要求左右两个操作数的类型是匹配的,或至少是兼容的。有时希望=两边的操作数的类型即使不兼容也能够成立,这就需要对=进行重载。...如果没有第 13 行对=的重载,第 34 行的s = "Good Luck,"肯定会因为类型不匹配而编译出错。...C++ 固有的前置++运算符的返回值本来就是操作数的引用,而后置++运算符的返回值则是操作数值修改前的复制品。...运算符重载的实质是将运算符重载为一个函数,使用运算符的表达式就被解释为对重载函数的调用。 运算符可以重载为全局函数。此时函数的参数个数就是运算符操作数个数,运算符操作数就成为函数的实参。

1.1K20

C++ 运算符重载

C++运算符重载的概念和原理 2. C++重载=(C++重载赋值运算符) 3. C++深拷贝和浅拷贝(C++深复制和浅复制) 4. C++运算符重载为友元函数 5....2 C++重载=(C++重载赋值运算符)  赋值运算符=要求左右两个操作数的类型是匹配的,或至少是兼容的。有时希望=两边的操作数的类型即使不兼容也能够成立,这就需要对=进行重载。...如果没有第 13 行对=的重载,第 34 行的s = "Good Luck,"肯定会因为类型不匹配而编译出错。...C++ 固有的前置++运算符的返回值本来就是操作数的引用,而后置++运算符的返回值则是操作数值修改前的复制品。...运算符重载的实质是将运算符重载为一个函数,使用运算符的表达式就被解释为对重载函数的调用。 运算符可以重载为全局函数。此时函数的参数个数就是运算符操作数个数,运算符操作数就成为函数的实参。

1.2K00
  • 运算符重载

    这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。    ...(6) 运算符重载是针对新类型数据的实际需要对原有运算符进行的适当的改造,重载的功能应当与原有功能相类似,避免没有目的地使用重载运算符。   ...但是,这样的运算符函数访问类的私有和保护成员时,必须使用类的公有接口中提供的设置数据和读取数据的函数,调用这些函数时会降低性能。可以内联这些函数以提高性能。)   ...因此: (1) 双目运算符重载为类的成员函数时,函数只显式说明一个参数,该形参是运算符的右操作数。 (2) 前置单目运算符重载为类的成员函数时,不需要显式说明参数,即函数没有形参。...,由于没有隐含的this指针,因此操作数的个数没有变化,所有的操作数都必须通过函数的形参进行传递,函数的参数与操作数自左至右一一对应。

    1.1K70

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

    运算符重载(函数重载)是C++多态的重要实现手段之一。通过运算符重载运算符功能进行特殊定制,使其支持特定类型对象的运算,执行特定的功能,增强C++的扩展功能。...,要求在使用重载运算符运算符左侧的操作数是整 型量(如表达式 i+c2,运算符左侧的操作数 i 是整数),这时是无法利用前面定义 的重载运算符的,因为无法调用 i.operator+函数。 可想而知,...如果运算符左侧 的操作数属于C++标准类型(如int)或是一个其他类的对象,则运算符重载函数 不能作为成员函数,只能作为非成员函数。 如果函数需要访问类的私有成员, 则必须声明为友元函数。 可以在 Complex...符的表达式中,要求运算符左侧的操作数与函数第一个参数对应,运算符右侧 的操作数与函数的第二个参数对应。 如 c3=i+c2; // 正确 , 类型匹配 c3=c2+i; // 错误 , 类型不匹配...,也存在着一些限制,这些限制包括: 1、为防止用户为标准类型重载运算符重载后的运算符必须至少有一个是用户自定义类型的数据。

    84130

    运算符重载的基本规则和习惯用法是什

    运算符重载的通用语法 在重载时,你不能更改 C++ 中内置类型的运算符的含义,只能对自定义类型[1]的运算符进行重载。也就是,运算符两边的操作数至少有一个是自定义的类型。...始终重载运算符众所周知的语义。 C++运算符重载的语义并没有限制,意思是你可以对+号重载成-号的语义,但这种做法会给别人带来歧义,不建议这么做。 始终提供一组相关的操作。...., Nov, Dec} 你想为它重载递加和递减运算符,但是你是无法实现它们为成员函数的,因为在 C++ 中,枚举类型压根就没有成员函数这一说。...普通运算符重载的用法 重载运算符的大部分代码都是固定的。这并不奇怪,因为运算符就是语法糖而已,它们完全可以由普通函数完成。但是,确保这些运算符重载的代码执行正确是非常重要的。...void f(my_string&); void f(const char*); f(my_string()); 即使是资深的 C++ 程序员有时候也会在这方面犯错。

    73610

    运算符重载(超详细)

    这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。...(6) 运算符重载是针对新类型数据的实际需要对原有运算符进行的适当的改造,重载的功能应当与原有功能相类似,避免没有目的地使用重载运算符。...但是,这样的运算符函数访问类的私有和保护成员时,必须使用类的公有接口中提供的设置数据和读取数据的函数,调用这些函数时会降低性能。可以内联这些函数以提高性能。)...因此: (1) 双目运算符重载为类的成员函数时,函数只显式说明一个参数,该形参是运算符的右操作数。 (2) 前置单目运算符重载为类的成员函数时,不需要显式说明参数,即函数没有形参。...this指针,因此操作数的个数没有变化,所有的操作数都必须通过函数的形参进行传递,函数的参数与操作数自左至右一一对应。

    87020

    CC++对bool operator < (const p &a)const的认识,运算符重载详解(杂谈)

    这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。    ...因此: (1) 双目运算符重载为类的成员函数时,函数只显式说明一个参数,该形参是运算符的右操作数。 (2) 前置单目运算符重载为类的成员函数时,不需要显式说明参数,即函数没有形参。...,由于没有隐含的this指针,因此操作数的个数没有变化,所有的操作数都必须通过函数的形参进行传递,函数的参数与操作数自左至右一一对应。  ...这些运算符重载只能是成员函数。...运算符重载是针对新类型数据的实际需要对原有运算符进行的适当的改造,重载的功能应当与原有功能相类似,避免没有目的地使用重载运算符

    2.2K61

    C++类和对象】拷贝构造与赋值运算符重载

    return 0; } C++为了增强代码的可读性引入了运算符重载运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。...2.2赋值运算符重载 赋值运算符重载属于运算符重载的一种 1.赋值运算符重载格式: 返回类型 operator=(const 类型名& 右操作数) { // 赋值操作的实现 //...3.默认生成的赋值运算符重载C++类和对象中用户没有显式实现赋值运算符重载时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝; 注意:内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符重载完成赋值...3.结语 对于C++类和对象的拷贝构造函数与运算符重载它们一个是在创建对象时使用另一个创建好的对象来进行赋值(拷贝构造),另一个则是在两个已经创建好的对象之间进行赋值(赋值运算符重载); 此外它们两个如果没有在类中显式实现编译器都会默认生成对应的函数...; 以上就是C++类和对象拷贝构造与赋值运算符重载所有的内容啦~ 完结撒花 ~

    16110

    C++の表达式与语句

    我所理解的就是能表示操作数之间运算关系的表达式,那么表示操作数之间运算关系的是怎么实现的呢?是由运算符实现的,其实运算符才是表达式中的关键所在。下面我们重点说说运算符。...= vec1.end(); ++i) std::cout << *i << std::endl; } 重载运算符 C++中有一种比较特殊的运算符重载运算符。...我们知道C++运算符可以用在基本内置类型,也可以用在类类型。那么这两者有什么不同呢?当用于类类型时,这些运算符可以被用户自定义,也就是说它可以有新的含义。因为形同义不同所以被称作重载运算符。...那么,我们在这之前有没有见过呢?当然!...这样初步看,重载运算符相对于普通的运算符更加灵活。实际上,重载运算符就像是我们自己创造的一样,我们可以定制化我们自己的运算符

    31310

    C++编程语言中重载运算符(operator)介绍「建议收藏」

    使用 operator 重载运算符,是 C++ 扩展运算符功能的方法。...(实际上,C++ 中各种“功能”都是通过函数实现的) 1.2 Why C++ 提供的运算符,通常只支持对于基本数据类型和标准库中提供的类进行操作,而对于用户自己定义的类,如果想要通过这些运算符实现一些基本操作...1.3.2 运算符重载实现为非类的成员函数(即全局函数) 对于全局重载运算符,代表左操作数的参数必须被显式指定。...可以根据以下因素,确定把一个运算符重载为类的成员函数还是全局函数: 如果一个重载运算符是类的成员函数,那么只有当与它一起使用的左操作数是该类的对象时,该运算符才会被调用;而如果该运算符的左操作数确定为其他的类型...,则运算符必须被重载为全局函数; C++ 要求’=’、'[]’、'()’、’->’运算符必须被定义为类的成员函数,把这些运算符通过全局函数进行重载时会出现编译错误; 如果有一个操作数是类类型(如 string

    3.1K31

    C++ 炼气期之算术运算符

    也可称为操作数。 ``运算符`。 运算符是计算机语言提供的能对数据进行基本运算操作的功能体。开发者在实现自己的逻辑运算时,需要组合这些运算符来描述自己的逻辑运算过程。...运算符操作数:作用于一个操作数运算符为一元运算符,作用于两个操作数运算符为二元运算符C++中还有一个可作用于三个操作数的条件运算符。...3.2 运算符重载问题 C++可以重载运算符,所谓重载运算符,指同一个运算符可以根据使用时的上下文信息,表现出不同的运算能力。如-运算符, 当作为二元运算符时,用来对操作数进行相减操作。...运算符重载C++中的一个特色。 对于有符号数据类型而言,如果在字面常量前面没有显示提供正、负符号,则默认为 +(正)符号。...3.6 类型转换 根据运算符的基本使用原则,要求所有操作数的类型必须相同。 有时,在一个表达式中,即使存在多个操作数的类型不一致,也能正常工作。

    54230

    C++ 操作符重载形式——成员函数 or 友元函数

    操作符重载,又名运算符重载,是 C++ 多态的重要实现手段之一。通过运算符重载运算符功能进行特殊定制,使其支持特定类型对象的运算,执行特定的功能,增强 C++ 的扩展功能。...对运算符重载,我们需要坚持四项基本原则: (1)不可臆造运算符; (2)运算符原有操作数的个数、优先级和结合性不能改变; (3)操作数中至少一个是自定义类型; (4)保持重载运算符的自然含义。...一般来说,C++ 运算符重载可采用成员函数和友元函数,二者都可以访问类的私有成员,那么该采用哪一种呢?首先看一下二者的区别。...当重载为成员函数时,会隐含一个 this 指针;当重载为友元函数时,不存在隐含的 this 指针,需要在参数列表中显示添加操作数。...有些双目运算符是不能重载为友元函数的,比如赋值运算符=、函数调用运算符()、下标运算符[]、指针运算符->等,因为这些运算符在语义上与this都有太多的关联。

    99730

    C++运算符重载形式——成员函数or友元函数

    运算符重载C++多态的重要实现手段之一。通过运算符重载运算符功能进行特殊定制,使其支持特定类型对象的运算,执行特定的功能,增强C++的扩展功能。...运算符重载的我们需要坚持四项基本原则: (1)不可臆造运算符; (2)运算符原有操作数的个数、优先级和结合性不能改变; (3)操作数中至少一个是自定义类型; (4)保持重载运算符的自然含义...一般来说,C++运算符重载可采用成员函数和友元函数,二者都可以访问类的私有成员,那么该采用哪一种呢?首先看一下二者的区别。...(1)当重载为成员函数时,会隐含一个this指针;当重载为友元函数时,不存在隐含的this指针,需要在参数列表中显示地添加操作数。...有些双目运算符是不能重载为友元函数的,比如赋值运算符=、函数调用运算符()、下标运算符[]、指针运算符->等,因为这些运算符在语义上与this都有太多的关联。

    2.3K20

    EasyC++65,运算符重载限制

    这是EasyC++系列的第65篇,运算符重载限制。 重载限制 上一篇我们讲了在类和结构体当中重载运算符,关于运算符重载并不是随心所欲的。C++给出了一些限制,从而保证了规范,以及程序运行的准确性。...下面我们就来一一来看下: 必须至少有一个操作数是用户定义的类型 这句话看不明白没有关系,我们只需要记住它的目的就好了。它的主要目的是为了防止用户为了标准类型重载运算符。...不会出现一些反人类的情况 不能违反运算符原来的规则 这一点很好理解,比如+号,它的运算就是计算两个数的和。需要有两个操作数,现在我们把它重载成一个操作数,就是违法的。...不能创建新运算符 这一点之前已经说过了,比如不能定义operator @等这种原来没有运算符。 禁止名单 有一些运算符是禁止重载的,如:sizeof, ., ::, ?...:, typeid, const_cast, dynamic_cast, reinterpret_cast, static_cast 这些运算符往往都有特殊的功能,直接从实现层面禁止重载

    12600

    C++运算符重载 ⑨ ( 等号 = 运算符重载 | 调用默认浅拷贝构造函数的情况分析 | 等号 = 运算符重载 与 拷贝构造函数 各自使用场景 | 等号 = 操作符重载步骤 )

    , 并支持链式操作 ; 一、等号 = 运算符重载 ---- 1、调用默认浅拷贝构造函数的情况分析 C++ 编译器 为 类 提供的 默认的 拷贝操作 , 是对 成员变量 的简单拷贝 , 是 浅拷贝 ;...各自使用场景 等号 = 运算符重载 与 拷贝构造函数 各自使用场景 : 拷贝构造函数 : 如果 使用对象 为一个 新对象 进行初始化 , 调用的是拷贝构造函数 ; 等号 = 运算符重载 : 如果 使用对象...为一个已存在的对象 重新进行赋值 , 调用的是 等号运算符重载运算符方法 ; 3、= 操作符重载步骤 使用 成员函数 实现 等号 = 运算符重载 : 首先 , 写出函数名 , Student s2...= s; 等号 = 运算符重载 , 函数名规则为 " operate " 后面跟上要重载运算符 , 函数名是 operate= ; operate= 然后 , 根据操作数 写出函数参数 , 参数一般都是...; 如果是成员函数 , 则将重载函数写在 左操作数 中 , 在 重载操作数的 成员函数中 this 指针就是 左操作数 ; operator=(Student& s) 再后 , 根据业务完善返回值 ,

    23720

    C++】类和对象 (中篇)

    1、运算符重载的引入 对于C/C++编译器来说,它知道内置类型的运算规则,比如整形+整形、指针+整形、浮点型+整形;但是它不知道自定义类型的运算规则,比如日期+天数 、日期直接比较大小、日期-日期;我们要进行这些操作就只能去定义对于的函数...,比如AddDay、SubDay;但是这些函数的可读性始终是没有 + - > < 这些符号的可读性高的,而且不同程序员给定的函数名称也不一样相同; 所以为了增强代码的可读性,C++为自定义类型引入了运算符重载...,也直接操作 this 指针即可; 还是以日期+天数为例; //运算符重载+= void operator+=(int day) //只传递右操作数,通过this操作左操作数 { this->...:比如operator@; 重载操作符必须有一个类类型参数 (因为运算符重载只能对自定义类型使用); 用于内置类型的运算符,其含义不能改变,即不能对内置类型使用运算符重载; 作为类类的成员函数重载时,其形参看起来比操作数数目少...运算符重载C++为了增强代码的可读性而引入的语法,它只能对自定义类型使用,其函数名为 operator 关键字加相关运算符; 由于运算符重载函数通常都要访问类的成员变量,所以我们一般将其定义为类的成员函数

    66500

    类和对象:运算符重载

    前言: 在C++中,运算符重载是一种强大的特性,它允许我们重新定义已有的运算符,以便用于用户自定义的数据类型。..._day; } 用d1.operator(d2)或者d1 == d2都可以实现; 由于在类外实现重载,所以没有this指针,所以可以用类内,但是C++的语法会对此进行优化直接使用d1 == d2也可以完成...全局函数没有 this 指针,因此无法进行这种检查。 语法要求:C++ 语法要求赋值运算符 = 必须是类的成员函数。尝试将其定义为非成员函数会导致编译错误,因为编译器期望赋值运算符是类的成员。...默认赋值运算符重载 用户没有显式实现时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝。、(值拷贝/浅拷贝 类似Date )。...如果类中包含了其他自定义类型作为其成员变量,并且这些自定义类型重载了赋值运算符 =,那么在进行类实例的赋值操作时,编译器会尝试调用这些成员变量类型的赋值运算符来完成赋值(MyQueue)。

    10210

    C++从入门到精通——类的6个默认成员函数之赋值运算符重载

    class Date {}; 一、运算符重载 定义 C++为了增强代码的可读性引入了运算符重载运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似..._day; } private: int _year; int _month; int _day; }; 函数重载运算符重载的区别 不同点 函数重载运算符重载C++...运算符重载是指在C++中允许自定义类的成员函数或非成员函数来重新定义运算符的行为。通过运算符重载,可以为自定义的类创建与内置类型相似的运算符行为,使得自定义类的对象可以像内置类型一样进行运算。...总结 函数重载:可以让函数名相同,参数不同的函数同时存在 运算符重载:让自定义类型可以使用运算符,并且控制运算符的行为,增强可读性 他们之间各论各的,没有关系 多个同一运算符重载可以构成函数重载...用户没有显式实现时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝。 注意: 内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符重载完成赋值。

    11910

    C++笔记:运算符重载

    C++笔记:运算符重载 引言 函数重载就是对一个已有的函数赋予新的含义,使之实现新功能,做到“一名多用”。 运算符也可以重载,在C++标准库中也使用了大量的运算符重载。...,其右侧的操作数作为第二个实参。...重载运算符的规则 C++ 不允许用户自己定义新的运算符,只能对已有的 C++ 运算符进行重载C++ 中绝大部分的运算符允许重载。...: 条件运算符 运算符重载不能改变运算符的运算对象(即操作数)的个数、优先级和结合性。 重载运算符必须和用户自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。...++i ,运算符重载函数的一般格式为: 类型 operator++(int) //多了一个int型形参 Complex operator++(int index); //后置运算符 c++ 重载运算符

    1.2K20
    领券