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

为什么只针对重载操作符,而不针对名称相同但作用域不同的函数?

为了理解为什么只针对重载操作符而不针对名称相同但作用域不同的函数,首先需要了解重载操作符和函数作用域的概念。

重载操作符指的是在编程语言中,为了对不同的数据类型进行特定的操作,可以对操作符进行重载,以实现不同的功能。通过重载操作符,我们可以定义自定义的行为,使得操作符对不同的数据类型进行适当的操作。

函数作用域指的是在编程语言中,函数的定义和调用需要在特定的作用域范围内进行。每个函数都有自己的作用域,包括函数的参数、局部变量和函数体内的代码。作用域可以限定函数内部的变量和函数对外部变量的访问。

现在回答为什么只针对重载操作符,而不针对名称相同但作用域不同的函数这个问题。重载操作符是一种特殊的语法结构,允许我们对不同的数据类型进行自定义操作。由于操作符是语言内置的元素,对于操作符的重载,编译器可以通过语法分析和类型推导来判断调用哪个重载版本的操作符函数。因此,对于重载操作符,可以根据不同的数据类型来选择正确的操作符函数。

然而,函数的作用域是在运行时决定的,而不是在编译时。编译器无法通过语法分析和类型推导来确定调用哪个作用域的函数。因此,对于名称相同但作用域不同的函数,编译器无法准确确定调用哪个函数。这样的设计会引入很多歧义和不确定性,使得代码难以理解和维护。为了避免这种混乱,大多数编程语言选择只针对重载操作符进行处理,而不针对名称相同但作用域不同的函数。

总结起来,只针对重载操作符而不针对名称相同但作用域不同的函数,是因为重载操作符是一种特殊的语法结构,编译器可以通过语法分析和类型推导来确定调用哪个重载版本的操作符函数;而函数的作用域是在运行时决定的,编译器无法准确确定调用哪个作用域的函数,容易引起代码歧义和不确定性。

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

相关·内容

【C++修行之道】命名空间 、C++输入&输出、缺省参数和函数重载

同一个工程中允许存在多个相同名称命名空间,编译器最后会合成同一个命名空间中。...(返回值不同无法区分,返回值不是重载条件) 在同一个作用才有重载概念 // 不同作用 可以同名 namespace bit1 { void Swap(int* pa, int* pb) {...--名字修饰(name Mangling) 为什么C++支持函数重载C语言不支持函数重载呢?...通过这里就理解了C语言没办法支持重载,因为同名函数没办法区分。C++是通过函数修 饰规则来区分,只要参数不同,修饰出来名字就不一样,就支持了重载。...如果两个函数函数名和参数是一样,返回值不同构成重载,因为调用时编译器没办 法区分。 今天就先到这了!!!

6000

【c++入门】命名空间,缺省参数与函数重载

命名空间提供了一个范围,在这个范围内名字(可以是变量、函数、结构体、类等)是可见,但在范围外则不是。这允许开发者在不同命名空间中使用相同名字,不会造成冲突。...这句话含义是,对于给定函数,其缺省参数应该函数声明或定义中一处指定,不是两处同时指定 理解这句话关键在于区分声明和定义概念: 函数声明:告诉编译器函数名称、返回类型以及参数列表(类型...,这个地址修正过程也叫做重定位 接下来我们所讲解函数重载与上述内容也有所关联 6.函数重载 函数重载是C++语言一个特性,它允许在同一作用内声明几个具有相同名字函数,只要这些函数参数列表不同...,也就是允许同一个作用内存在多个同名函数,只要它们参数列表不同。...C++是通过函数修饰规则来区分,只要参数不同,修饰出来名字就不一样,就支持了重载 如果两个函数函数名和参数是一样,返回值不同构成重载,因为调用时编译器没办法区分 本节内容到此结束,感谢大家阅读

17110
  • 读完某C++神作,我记下了100句话

    std::cout ::是作用操作符,表示std名空间下cout,用来区别其它名空间同名变量。...对于list对象应该优先使用list容器特有的成员版本【能添加删除元素】,不是泛型算法。 简单说,类就是定义了一个新类型和一个新作用。成员访问级别默认私有。...重载操作符:保留字operator后面接需要定义操作符符号,返回类型和参数表和其它函数一样。只能重载已有的操作符针对类类型,最好重载原本对类类型无意义操作符。...局部作用域中声明函数不会重载全局域函数。派生类定义函数也不重载基类函数【想重载要么不定义,要么全定义】。using作用。...模板类中static成员由同一实例化对象共享,但不同模板形参实例化对象间共享。

    1.4K20

    【C++】——入门基础知识超详解

    使用命名空间目的是对标识符名称进行本地化,以避免命名冲突或名字污染,namespace关键字出现就是针对这种问题。...: 1.加命名空间名称作用限定符 这是最为明确方式,通过加上命名空间名称作用限定符 :: 来访问命名空间中成员。...这展示了同一个表达可以有不同解释。 同样地,在C++中,函数也可以重载。 5.1 函数重载概念 函数重载:是指在同一作用域中声明几个功能类似参数不同同名函数。...这些同名函数参数列表(参数个数、类型或类型顺序)不同函数重载常用于处理实现功能类似数据类型不同问题。...两个函数如果函数名和参数都相同,即使返回值不同,也构成重载,因为编译器无法区分它们。 6.

    11410

    从零开始学C++之从C到C++(一):const与#define、结构体对齐、函数重载name mangling、newdelete 等

    作用不同,const定义常变量作用为该变量作用范围。...#define定义常量作用为它定义点到程序结束,当然也可以在某个地方用#undef取消 #define定义常量,容易产生副作用: //Effective C++ 3rd一个例子。...(六)、函数重载、name managling 与extern "C" (1)、函数重载 相同作用,如果两个函数名称相同参数不同,我们把它们称为重载overload,函数重载又称为函数多态性(...函数重载函数覆盖、函数隐藏是不同,这一点以后再讲。...(int i); void abs(int i); //如果返回类型不同函数相同、形参也相同,则是不合法,编译器会报"语法错误"。

    1.2K00

    C++复习篇

    参数表不同主要有以下几种 1) 参数个数不同 2) 参数类型不同 3) 参数顺序不同 注意: 重载函数需要避免使用参数默认值 调用重载函数时,只会匹配函数参数表,与函数返回值无关 函数重载必须发生在同一个作用域中...使'+,-,*,/'等操作符拥有了重载能力,能够实现对象之间操作,不再单纯普通变量之间操作了....18.通过()操作符重载实现:函数对象 函数对象是指该对象具备函数行为 函数对象,是通过()调用操作符声明得到,然后便能通过函数方式来调用该对象了. ()调用操作符可以定义不同参数多个重载函数 (....父类和子类中同名成员/函数 子类可以定义父类中同名成员和同名函数 子类中成员变量和函数将会隐藏父类同名成员变量和函数 父类中同名成员变量和函数依然存在子类中 通过作用分辨符(::)才可以访问父类中同名成员变量和函数...(需要C++11支持) 带有引用计数机制,支持多个指针对象指向同一片内存(实现共享) 提供swap()成员函数,用来交换两个相同类型对象指针地址 提供unique()成员函数, 判断该指针对象地址是否被其它指针对象引用

    1.3K20

    C++面向对象程序设计_Part1

    函数重载 构造函数位置 参数传递 返回值传递 友元 操作符重载(一),this, cout 操作符重载(二)非成员函数,无this,临时对象 Big Three ---string class begin...c++中允许“函数名”相同函数参数需要不同(参数后面修饰函数const也算是参数一部分),这样可以满足不同类型参数应用。...上述中就有不同real,不必担心它们名字相同反正调用混乱,相同函数名和不同参数,编译器编译后实际名称会不一样,实际调用名并不一样,所以在开始函数名打了引号。...上面介绍__doapl函数将在操作符重载中进行调用,可以看到第一个参数是this,对于成员函数来说,都有一个隐藏参数,那就是this,this是一个指针,指向调用这个函数对象,操作符重载一定是作用在左边对象...c1 便是所谓stack object,其生命在作用(scope) 结束之际结束。这种作用object,又称为auto object,因为它会被「自动」清理。

    96820

    ES2020

    、分支等非顶层作用使用,按需加载、懒加载都不是问题 模块标识支持变量传入,可动态计算确定模块标识 不仅限于module,在普通script中也能使用 注意,虽然长函数**import()实际上是个操作符...func(arg0, arg1) : undefined P.S.注意操作符是?.不是单?,在函数调用中有些奇怪alert?.(),这是为了与三目运算符中?...针对null和undefined,&&遇到任意假值都会返回,有时无法满足需要 例如常用正则提取目标串,语法描述相当简洁: 'string'.match(/(sing)/)?....针对null和undefined,||遇到任一假值都会返回右侧默认值 四.大数运算 新增了一种基础类型,叫BigInt,提供大整数运算支持: BigInt is a new primitive that...EnumerateObjectProperties globalThis 最后一个新特性是globalThis,用来解决浏览器,Node.js 等不同环境下,全局对象名称统一,获取全局对象比较麻烦问题

    51820

    从基础入门到学穿C++(类和对象篇)【超详细】【一站式速通】

    C++兼容C语法,也可以通过struct定义类,但是在struct中成员默认是公有的 类定义了一个新作用,类所有成员都在类作用域中。...在类体外定义成员,需要使用::作用解析符知名成员属于哪个类。 声明和定义区别 声明是一种承诺,承诺要做某事,但是还没实施。...类实例化对象中存储成员变量,不存储成员函数 一个类实例化出N个对象,每个对象成员变量都可以存储不同值,但是调用函数却是同一个。...,名字与类名相同,创建类类型对象时由编译器自动调用,以保证每个数据成员都有 一个合适初始值,并且在对象整个生命周期内调用一次。...函数原型 返回值类型 operator操作符(参数列表) 运算符有几个操作数,operator重载函数就有几个参数。

    9010

    【细品C++】函数重载函数名字修饰)

    相较于C,函数重载作为C++新加功能,解决了在某些需要频繁调用相同处理方式使用处理不同类型数据函数时,C语言函数调用复杂或者实现复杂痛点。希望本篇文章能对你函数重载学习有所帮助。...//表达式1 1 + 3//调用了针对整型操作数加法操作符 //表达式2 1.0 + 3.0//实际上调用了另一个专门针对浮点操作数加法操作符 而对于函数来说,出现在相同作用域中两个函数...,如果具有相同名字形参不同(参数个数,类型,或类型顺序),则称之为重载函数。...如果两个函数形参表完全相同返回类型不同,则第二个声明是错误函数是不能仅仅基于不同返回类型实现重载。(试想一下编译器要怎么样才能识别出你调用是哪个函数呢?)...可以看到,在进行汇编时候生成了一个叫做符号表东西,对于C来说,符号表记录函数信息只有函数名称及其地址(源文件存在声明函数,也会生成地址,最后地址链接时进行重定位)。

    24720

    【c++】基础知识——快速入门c++

    命名空间会对标识符名称进行本地化,本质上是使它们位于不同作用域中,避免了冲突情况。 接下来我们尝试定义命名空间。...3.c++中有四种函数局部、全局域、命名空间、类不同当中相同变量或者函数名形成隔离,不会冲突;函数局部和全局域会影响变量声明周期,命名空间和类不会影响变量声明周期。...3.endl:是一个函数,它用于输出一个换行符,与传统输出“\n”不同是,它可以在各种操作系统下正常使用,“\n”在不同操作系统中含义可能不同。...五、函数重载 c++中,当同一作用域中出现同名函数时,如果这些函数形参不同(参数个数不同或者参数类型有不同),就会出现函数重载,这些函数之间不会发生冲突情况。...,但是当调用函数传参,就会出现歧义,编译器无法确定我们调用是哪一个函数

    10310

    c++基础之函数

    这个对象名有它作用,对象所在内存有自己声明周期。这二者不是一个概念,不要弄混淆了。 变量作用一般在它所定义语句块中起作用。...但是变量本身根据定义位置不同,生命周期也不同,例如 int func() { for(int i = 0; i < 10; i++); } 上述代码中i这个名称仅仅在for循环中有效,i所指代变量...同一作用几个函数名称相同形参列表不同,称之为函数重载。注意这里几个前提条件:同一作用函数名称相同、形参列表不同;这些条件缺一不可。...: 可以从一堆重载函数中正确匹配,编译通过 没有函数复合调用时传入实惨,此时编译报错,无法找到对应函数 多个重载形式都复合传入实惨,此时编译报错,存在二义性 不要在局部作用域中定义函数,因为局部作用内出现重名情况时...;也可以使用取地址符针对函数名称取地址,二者是等价

    57230

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

    函数重载是指在同一个作用域中定义多个具有相同名称参数列表不同函数。这样做目的是为了提供更灵活函数调用方式,使得同一个函数名可以根据不同参数类型或参数个数执行不同操作。...总结:函数重载针对函数进行,通过改变参数列表来定义多个同名函数运算符重载针对运算符进行,通过重新定义运算符行为来实现与内置类型相似的运算。...相似点 函数重载和运算符重载在某些方面是相似的,它们都是通过改变函数或运算符行为来提供更灵活功能。 名称相同函数重载和运算符重载都是使用相同名称来定义多个不同行为。...函数重载用于定义同一功能不同实现,运算符重载用于为自定义类创建与内置类型相似的运算符行为。...传值返回和传址返回要点 可以看到传值和传址在遇到不同问题时有不同表现,如下,在运算符重载问题下,传址调用比传值调用效率更高,关于为什么要返回*this,见下面 正常赋值表达式都是支持连续赋值

    12410

    C++为什么有参数依赖查找(ADL)?

    重载解析:如果名称查找找到了多个具有相同名称声明,编译器将根据上下文和参数类型来选择最合适声明。...什么是 struct hack 同一作用名称冲突:在C++中,如果在同一作用内,一个名称被用作不同类型声明,比如一部分声明是类型(如类、结构体、联合体或枚举),另一部分声明是非类型(如变量、...尽管发生了名称冲突,C++编译器不会报错,因为这种隐藏是有意为之,以允许类型和非类型名称共存于同一作用。...在查找时,还存在一些特殊规则,以下仅举两例:比如在查找运算符::左边名字时,会忽略函数、变量、枚举等,只有类型名称会被查找在类内部声明友元函数,其名称查找规则与成员函数相同。...在类外部定义友元函数,其查找规则与命名空间中函数相同。限定名称查找限定名称查找用于处理在作用解析操作符::右侧出现名称

    10410

    C++primer学习笔记(五)

    简单说,类就是定义了一个新类型和一个新作用。成员访问级别默认私有。在声明和定义处指定inline都是合法。类前向声明一般用来编写相互依赖类。类定义以分号结束,之后可以跟对象列表。...mutable用来声明数据成员可以修改【突破各种const限制】。 使用类外全局作用变量可以::var来获得。 类中const成员必须在初始化列表中初始化,无法再构造函数体内赋值。...将复制构造函数声明为private可防止复制。定义了复制构造函数,也必须定义默认构造函数重载赋值操作符=,隐含第一个参数this。复制构造函数、赋值操作符、显示析构函数【虚空不算】一般同时出现。...重载操作符:保留字operator后面接需要定义操作符符号,返回类型和参数表和其它函数一样。只能重载已有的操作符针对类类型,最好重载原本对类类型无意义操作符。...使用算法sort等时会假定一些操作符(<)存在,此时要为类型定义重载操作符重载操作符如果是成员函数,左操作数必须是该类对象【一定是this】。 用函数或类操作某个类数据可设置其为友元。

    36810

    C++知识总结

    两者之间作用相同, 生存期不同.      ...static局部变量在所处模块初次运行时进行初始化工作,且操作一次       如果赋初值,则自动赋初值为0或空字符 void staticLocalVar() { static int a =...(4)流操作符重载返回值申明为“引用”作用: 流操作符>,这两个操作符常常希望被连续使用,例如:cout <<"hello" << endl; 因此这两个操作符返回值应该是一个仍然支持这两个操作符流引用...可选其它方案包括:返回一个流对象和返回一个流对象指针。但是对于返回一个流对象,程序必须重新(拷贝)构造一个新流对象,也就是说,连续两个<<操作符实际上是针对不同对象!这无法让人接受。...结构和联合都是由多个不同数据类型成员组成, 但在任何同一时刻, 联合中存放了一个被选中成员(所有成员共用一块地址空间), 结构所有成员都存在(不同成员存放地址不同)。2.

    1K40

    面向对象编程基础2(干货)

    注意:为屏蔽父类中那个方法,派生类中声明名称和类型、及函数名都要与父类对应方法相同,且声明这个方法时候要用new关键字。 ? ?...使用场合:结构:由于分配内存快,作用结束即被删除,不需要垃圾回收,用于小型数据结构,传递过程中会赋值,应该使用ref关键字提高效率。...概念3:重载操作符 1.装箱:值类型变成引用类型 -- 隐式转换。implicit关键词 2.拆箱:引用类型变成值类型 -- 显示装换。...explicit关键词 3.重载运算符:利用现有的某种运算符,针对自定义类或者结构,实现某种运算操作。 比如:公狗+母狗=小狗 -- 把加号重新定义,定义为制造小狗过程。...3.操作符重载 装箱拆箱: 优势:统一管理 劣势:性能损耗、安全风险。 运算符重载:对运算符赋予新概念 4. 泛型 泛型类、泛型接口、泛型方法。

    1.1K20

    ES11 来了,还学得动吗?

    、分支等非顶层作用使用,按需加载、懒加载都不是问题 模块标识支持变量传入,可动态计算确定模块标识 不仅限于module,在普通script中也能使用 注意,虽然长函数import()实际上是个操作符...func(arg0, arg1) : undefined P.S.注意操作符是?.不是单?,在函数调用中有些奇怪alert?.(),这是为了与三目运算符中?...针对null和undefined,&&遇到任意假值都会返回,有时无法满足需要 例如常用正则提取目标串,语法描述相当简洁: 'string'.match(/(sing)/)?....针对null和undefined,||遇到任一假值都会返回右侧默认值 四.大数运算 新增了一种基础类型,叫BigInt,提供大整数运算支持: BigInt is a new primitive that...EnumerateObjectProperties globalThis 最后一个新特性是globalThis,用来解决浏览器,Node.js 等不同环境下,全局对象名称统一,获取全局对象比较麻烦问题

    55910

    java面试强基(1)

    jvm针对不同系统有不同实现,目的是使用相同字节码,它们都会给出相同结果。字节码和不同系统 JVM 实现是 Java 语言“一次编译,随处可以运行”关键所在。...3.什么是字节码,采用字节码好处是什么? ​ 在java中,字节码指的是虚拟机可以理解代码(.class文件)。他面向任何特定处理器,面向虚拟机。...由于字节码并不针对一种特定机器,因此,Java 程序无须重新编译便可在多种不同操作系统计算机上运行。 ​...C ++同时支持方法重载操作符重载,但是 Java 支持方法重载操作符重载增加了复杂性,这与 Java 最初设计思想不符)。...操作符重载,也叫运算符重载,是C++重要组成部分,它可以让程序更加简单易懂,简单运算符使用可以使复杂函数理解更直观。

    40020
    领券