码迷,mamicode.com
首页 > 编程语言 > 详细

C++

时间:2019-09-14 00:24:15      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:def   判断   本质   隐式转换   长度   container   隐式   tle   数组   


date: 2019-9-13
title:


函数重载(静多态)

函数重载的命名规则

  1. 通过判断函数形参的类型、个数和顺序来区分多个相同函数名的函数
  2. 函数的返回值类型,不是区分函数重载的条件

函数重载的调用规则

  1. 参数类型符合时,严格按照上述要求调用
  2. 参数类型不符合时,编译系统会对参数进行隐式转换后,寻找对应的重载函数。
  3. 隐式转换的原则:低精度数据会自动转成高精度数据后,寻找对应的重载函数,如上述条件不满足,无高精度参数的函数,则会降低精度进行转换,此时可能会出现函数调用的歧义(ambiguous)现象,如数据为 int类型,但是重载函数参数只有double和float类型,或者数据为double类型,但是重载函数只有int和float类型的,再或者是,数据为long int,但是 重载数据只有int,double, float类型的。
  4. 因此总结,若函数重载时涉及参数隐式类型转换的,同时数据为高精度向低精度转换,则极有可能会出现歧义,编译器可能将其转换为任意一种低精度的数据。

函数重载的原理

倾轧(mangling)

  1. 倾轧的本质就是对函数的重命名
    技术图片
    技术图片
  2. 倾轧技术发生在两个阶段,.cpp编译阶段,和.h的声明阶段。只有两个阶段同时进行,才能匹配调用。
  3. C兼容C库函数(链接库),C库函数只有在链接时才加入,不存在让C编译器去倾轧的问题,而C都文件中声明的C库函数在调用时会发生倾轧,因此为了保证C库函数的一一对应,必须使得C++编译器在编译C库函数头文件时不倾轧,为了达到这个目的,我们必须引入extern "C"。

函数默认参数

默认参数的定义规则

  1. 在函数的形参定义时,直接赋予初值。
void Add (int a = 1, int b = 1)
{
...
}
  1. 同时,C++规定函数,形参的默认值,只能从右向左,且中间不能跳跃。
    错误定义方式
void sum (int a = 1, int b, int c = 3)
{
...
}

默认参数的使用规则

  1. 实参个数 + 默认形参个数 >= 参数个数

引用

引用的特性

  1. 引用是变量的别名,申请时不占用内存空间
  2. 引用申明时必须赋值。
  3. 一个变量可以有多个引用。
  4. 可以定义指针的引用,但是不能定义引用的指针。
  5. 普通引用变量的类型,必须与所引用对象一致。
  6. 数组也可以申请引用,但在定义时必须表明数组长度。

C++

标签:def   判断   本质   隐式转换   长度   container   隐式   tle   数组   

原文地址:https://www.cnblogs.com/XZZHY/p/11518018.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!