c++中不能重载的运算符有5个:“?:”、“.”、“::”、“sizeof”、“.*” 。 “.”和“::”运算符如果重载,可能会出现混淆;“sizeof”运算符不能重载是因为内部许多指针都依赖它;“.*”运算符引用指向类成员的指针。
本教程操作环境:windows7系统、C++17版本、Dell G3电脑。
C++中不能重载的运算符有5个,分别为:“?:” “.” “::” “sizeof” “.*” 。
重载:让操作符可以有新的语义,而不是更改语法,否则会引起混乱。
重载的部分规则:运算函数的参数至少有一个必须是类的对象或者是类的对象的引用。
下面来解释一下为什么这几个运算符不能进行重载。
(1)?:
假设可以重载,那么我们来看下列的代码:
exp1 ? exp2 : exp3
该运算符的含义是执行exp2和exp3中的一个,假设重载了,就不可以保证执行一个还是两个,还是都没执行,该运算符的跳转性质就不复存在了。所以,“?:”不能被重载。
(2).
假设可以重载,我们可以假设一种情况,创建一个对象,调用该对象的函数。
class Y{ public: void fun(); }; class X{ public: Y* p; Y& operator.(){ return *p; } void fun(); } void g(X& x){ x.fun(); }
这个例子中,x.fun()就不知道是调用哪一个fun函数了。
“.”运算符的含义是引用对象成员,然而被重载后就不能保证了,导致运算符意义的混淆。
(3)::
该运算符只是在编译的时候域解析,而没有运算参与。根据重载的规则,如果重载该运算符,就赋予了新的语义,可能会出现混淆。
(4)sizeof
不能被重载的原因主要是内部许多指针都依赖sizeof。
(5).*
引用指向类成员的指针
扩展资料:
重载运算符遵守的原则:
1. 被重载的操作符不可以通过连接其他符号来创建新的操作符。
2. 重载操作符必须有一个类类型或者枚举类型的操作数。
3. 内置类型的操作符,含义不能改变,如整数加法(+)。
4. 重载后的运算符不可以保证操作符的顺序。
5. 类成员的重载函数,其形参隐含一个默认的this指针。
6. 一般将赋值运算符定义为成员函数,将算数运算符定义为非成员函数。
7. 操作符定义为非类的成员函数时,一般将其定义为类的友元。
8. == 与 != 要成对出现。
9. 下标运算符[]:一个非const成员并返回引用,一个是const成员并返回引用。
10. * 与 -> 操作符,不显示任何参数。
11. 前置 ++/-- 必须返回被增量或者减量的引用。
12. 输入操作符和输出操作符必须定义为类的友元函数。
更多编程相关知识,请访问:编程入门!!
以上是c++中不能重载的运算符有哪些的详细内容。更多信息请关注PHP中文网其他相关文章!

C#和.NET适用于Web、桌面和移动开发。1)在Web开发中,ASP.NETCore支持跨平台开发。2)桌面开发使用WPF和WinForms,适用于不同需求。3)移动开发通过Xamarin实现跨平台应用。

C#.NET生态系统提供了丰富的框架和库,帮助开发者高效构建应用。1.ASP.NETCore用于构建高性能Web应用,2.EntityFrameworkCore用于数据库操作。通过理解这些工具的使用和最佳实践,开发者可以提高应用的质量和性能。

如何将C#.NET应用部署到Azure或AWS?答案是使用AzureAppService和AWSElasticBeanstalk。1.在Azure上,使用AzureAppService和AzurePipelines自动化部署。2.在AWS上,使用AmazonElasticBeanstalk和AWSLambda实现部署和无服务器计算。

C#和.NET的结合为开发者提供了强大的编程环境。1)C#支持多态性和异步编程,2).NET提供跨平台能力和并发处理机制,这使得它们在桌面、Web和移动应用开发中广泛应用。

.NETFramework是一个软件框架,C#是一种编程语言。1..NETFramework提供库和服务,支持桌面、Web和移动应用开发。2.C#设计用于.NETFramework,支持现代编程功能。3..NETFramework通过CLR管理代码执行,C#代码编译成IL后由CLR运行。4.使用.NETFramework可快速开发应用,C#提供如LINQ的高级功能。5.常见错误包括类型转换和异步编程死锁,调试需用VisualStudio工具。

C#是一种由微软开发的现代、面向对象的编程语言,.NET是微软提供的开发框架。C#结合了C 的性能和Java的简洁性,适用于构建各种应用程序。.NET框架支持多种语言,提供垃圾回收机制,简化内存管理。

C#和.NET运行时紧密合作,赋予开发者高效、强大且跨平台的开发能力。1)C#是一种类型安全且面向对象的编程语言,旨在与.NET框架无缝集成。2).NET运行时管理C#代码的执行,提供垃圾回收、类型安全等服务,确保高效和跨平台运行。

要开始C#.NET开发,你需要:1.了解C#的基础知识和.NET框架的核心概念;2.掌握变量、数据类型、控制结构、函数和类的基本概念;3.学习C#的高级特性,如LINQ和异步编程;4.熟悉常见错误的调试技巧和性能优化方法。通过这些步骤,你可以逐步深入C#.NET的世界,并编写高效的应用程序。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

WebStorm Mac版
好用的JavaScript开发工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。