C++

Posted xzzhy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++相关的知识,希望对你有一定的参考价值。


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++的主要内容,如果未能解决你的问题,请参考以下文章

C++之父的C++元宇宙

[C++]C++入门到入土篇 HelloWorld 解析 && C++入门

怎么找C++函数需要的头文件?(C++头文件C++函数文档C++文档)

如何识别项目是托管 c++ 项目还是非托管 c++ 项目

C++ 程序员应该使用哪些 C++ 习语? [关闭]

十类C++标准库 十类C++标准库简介