iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++中函数匹配机制详解
  • 522
分享到

C++中函数匹配机制详解

2024-04-02 19:04:59 522人浏览 独家记忆
摘要

首先,编译器会确定候选函数然后确定可行函数可行函数,再从可行函数中进一步挑选 候选函数:重载函数集中的函数 可行函数:可以调用的函数 最后进行寻找最佳匹配 有以下几种规则 1.该函数

首先,编译器会确定候选函数然后确定可行函数可行函数,再从可行函数中进一步挑选

候选函数:重载函数集中的函数

可行函数:可以调用的函数

最后进行寻找最佳匹配

有以下几种规则

1.该函数的每个实参的匹配都不劣于其他可行函数

2.至少有一个实参的匹配优于其他可行函数的匹配

3.满足上面两种要求的函数有且只有一个

如果上面三个要求都没满足,则出现二义性

一些演示

各有一个精确匹配的实参,编译器报错,不满足条件3

error

void func(int a,int b)
{
    cout << "(int,int)" << endl;
}
void func(double a, double b = 3.14)
{
    cout <<"(double,double = 3.14)" << endl;
}
int main()
{
    func(2.3,5);
}

调用函数类型转换优先级,依次递减

1.精确匹配

包含三种

(1)实参形参类型匹配

(2)从数组或者函数转到对应的指针

(3)添加或者删除顶层const

2.通过const转换实现匹配

3.通过类型提升匹配

4.通过算术类型转换或者指针转换的匹配

5.通过类 类型转换实现的匹配

小整形一般提升为int或者long,即便他的面量很小

void func(int a)
{
    cout << "(int)" << endl;
}
void func(short a)
{
    cout << "(short)" << endl;
}
int main()
{
    func(12);
    func('a');
}

 运行结果

所有算数类型级别转换都一样

error

void func(double a)
{
    cout << "(double)" << endl;
}
void func(float a)
{
    cout << "(float)" << endl;
}
int main()
{
    func(3.14);
}

不能重载const 和非const两个版本,但是引用可以 

关于引用:非const可以升级为const,但是const不能降级为非const

若有两种版本——const and not const,会根据传入的参数自动匹配

void func(const int &a)
{
    cout << "(const int&)" << endl;   
}
void func(int &a)
{
    cout << "(int&)" << endl;
}
int main()
{
    const int a = 3;
    int b = 4;
    func(a);
    func(b);
    func(5);
}

运行结果

 指针的情况于引用类似:

如果两个函数唯一的区别是他们指向的对象是常量或非常量,则编译器根据实参选择函数。

演示

void func(const int *a)
{
    cout << "(const int *)" << endl;
}
void func(int *)
{
    cout << "(int *)" << endl;
}
 
int main()
{
    int a = 3;
    int *pa = &a;
    const int *c_pa = &a;
    const int b = 4;
    const int *pb = &b;
    func(pa);
    func(c_pa);
    func(pb);
}

运行结果

 上面提到过的一些重载

using namespace std;
 
void func(int a)
{
    cout << "(int)" << endl;
}
void func(double a)
{
    cout << "(double)" << endl;
}
void func(int a,int b)
{
    cout << "(int,int)" << endl;
}
void func(double a, double b = 3.14)
{
    cout <<"(double,double = 3.14)" << endl;
}
void func(short a)
{
    cout << "(short)" << endl;
}
void func(float a)
{
    cout << "(float)" << endl;
}
void func(const int &a)
{
    cout << "(const int&)" << endl;
}
void func(int &a)
{
    cout << "(int&)" << endl;
}
void func(const int *a)
{
    cout << "(const int *)" << endl;
}
void func(int *)
{
    cout << "(int *)" << endl;
}

到此这篇关于c++中函数匹配机制详解的文章就介绍到这了,更多相关C++函数匹配内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++中函数匹配机制详解

本文链接: https://www.lsjlt.com/news/138804.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++中函数匹配机制详解
    首先,编译器会确定候选函数然后确定可行函数可行函数,再从可行函数中进一步挑选 候选函数:重载函数集中的函数 可行函数:可以调用的函数 最后进行寻找最佳匹配 有以下几种规则 1.该函数...
    99+
    2024-04-02
  • Javascala模式匹配机制详解
    目录模式匹配使用类型匹配进行异常处理使用样例进行模式匹配模式匹配 Scala有一个十分强大的模式匹配机制,可以应用在很多场合:switch语句、类型查询,以及“析构&rd...
    99+
    2023-02-01
    Java scala模式匹配 Java scala模式匹配机制 Java scala
  • C++ 函数的友元机制详解
    c++++ 友元机制允许非成员函数或类访问其他类的私有或保护成员,以实现以下目的:允许非成员函数访问私有成员允许成员函数访问其他类的私有成员允许类成员函数访问另一个类的私有成员 C++...
    99+
    2024-04-18
    c++ 友元机制
  • C++中的二进制函数详解
    C++中的二进制函数详解二进制函数是计算机科学中一类重要的函数,它们基于二进制操作,用于处理二进制数据。在C++中,二进制函数提供了丰富的功能,可以进行位操作、位移操作以及逻辑操作。一、位操作位操作是对二进制数据的每一位进行操作的方法。C+...
    99+
    2023-11-18
    二进制函数分析
  • C++中的随机数函数详解
    C++中的随机数函数详解随机数在计算机编程中起着重要的作用,它可以用于模拟随机事件、生成随机数序列等多种应用。C++语言中提供了一系列的随机数函数,方便开发人员进行随机数的生成和应用。本文将详细介绍C++中的随机数函数的使用方法和注意事项。...
    99+
    2023-11-18
    随机数生成器(Random Number Generator) 伪随机数(Pseudorandom Number) 随机
  • C++ 内联函数的调用机制详解
    内联函数在编译时展开,消除函数调用开销,提升性能。1. 调用机制:编译器将内联函数代码直接插入调用位置,无需函数调用机制。2. 实战案例:游戏开发等场景需要快速计算时使用内联函数。3. ...
    99+
    2024-04-29
    c++ 内联函数
  • c++元编程模板函数重载匹配规则示例详解
    目录前言开始模板函数重载匹配规则模板匹配规则使用最后前言 模板元编程,是一个听起来非常硬核的概念,会感觉这个东西非常的难,是大佬才能掌握的内容。而事实上,他也确实不简单(手动狗头)...
    99+
    2023-01-13
    c++元编程模板函数 c++ 模板函数匹配规则 c++ 模板函数重载匹配
  • C++中的复制构造函数详解
    目录复制构造函数复制构造函数的三种调用复制构造函数的禁用深拷贝与浅拷贝一定会生成默认复制构造函数吗?参考 总结普通变量的复制 有时我们会在定义一个变量的同时使用另一个变量来初始化它。...
    99+
    2024-04-02
  • C++析构函数内部工作机制详解
    目录1、析构函数的内部工作机制2、默认析构函数的内部工作机制3、析构函数的调用我们主要从三个方面来学习析构函数的工作原理: 析构函数的内部工作机制默认析构函数的内部工作机制析构函数的...
    99+
    2023-02-27
    C++析构函数原理 C++析构函数工作机制
  • C++类的特种函数生成机制详解
    目录C++类的特种函数生成机制规则例子:A BUG例子:std::mutex和std::thread题外话:为什么std::mutex不可移动?总结C++类的特种函数生成机制 规则 ...
    99+
    2024-04-02
  • C++ 函数参数的内存分配机制
    c++++ 函数参数的内存分配机制决定了参数在调用期间的存储方式:按值传递:参数副本传递,函数修改不影响原始变量。按引用传递:参数变量地址传递,函数修改反映在原始变量中。常量引用传递:类...
    99+
    2024-04-21
    c++ 内存分配 函数参数
  • C++中new和delete匹配使用过程详解
    目录一、new和delete的使用二、operator new和operator delete函数三、new和delete的实现原理四、申请空间和释放空间应配套使用五、定位new表达...
    99+
    2023-02-14
    C++ new与delete C++ new与delete的使用
  • C++ 虚拟函数详解:解答多态机制之谜
    c++++虚拟函数是实现多态性的关键,它允许派生类覆盖父类的行为:声明为虚函数,并在派生类中出现。调用时,编译器根据对象类型动态解析正确的函数版本。纯虚函数强制派生类提供自己的实现,以实...
    99+
    2024-04-29
    c++ 多态
  • C语言中随机数rand()函数详解
      在生活中很多场景下都需要产生随机数,比如抽奖,打牌,游戏等场景下就需要使用随机数。在C语言标准库函数里面有专门用来产生随机数的函数rand,它的函数原型如下:...
    99+
    2024-04-02
  • C++ 函数参数详解:协程中参数传递的异步机制
    协程中参数传递采用异步机制,不会在执行前复制参数值,而是动态获取。这种机制提供了灵活性,允许协程在运行时调整参数或延迟传递参数。具体步骤如下:传统函数参数传递:同步传递,函数执行前将实参...
    99+
    2024-04-26
    协程 c++ 函数 c++
  • SpringBoot + WebSocket 实现答题对战匹配机制案例详解
    概要设计 类似竞技问答游戏:用户随机匹配一名对手,双方同时开始答题,直到双方都完成答题,对局结束。基本的逻辑就是这样,如果有其他需求,可以在其基础上进行扩展 明确了这一点,下面介绍开...
    99+
    2024-04-02
  • golang函数中错误处理机制详解
    golang 函数中错误处理机制利用 error 类型和 error 标准接口来处理错误。错误类型可自定义,通过 error() 方法返回错误描述。错误处理机制包括显式错误(通过返回值传...
    99+
    2024-05-03
    golang 错误处理
  • JavaScript中match函数如何匹配数组
    小编给大家分享一下JavaScript中match函数如何匹配数组,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!JavaScript的特点1.JavaScript...
    99+
    2023-06-14
  • C++ 函数异常详解:错误处理机制浅析
    异常是 c++++ 中的错误处理机制,用于处理意外事件。异常处理机制包括 try-catch 块和异常指定符,后者用于在函数签名后指定可能引发的异常类型。标准 c++ 库提供了多种内置异...
    99+
    2024-05-03
    c++ 异常
  • 深入理解 C++ 函数内存分配和销毁机制
    函数内存管理涉及自动变量(栈分配,函数返回时释放)和动态分配(堆分配,使用 new,需要手动释放)。函数调用时内存栈展开,每个调用分配自己的内存,释放时栈撤回到调用点。避免内存泄漏的关键...
    99+
    2024-04-22
    内存分配 cpp c++
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作