• 内联函数和函数重载


    内联函数

      宏可以避免函数调用带来的开销,但存在两个问题:1)宏没有作用域,没有类型检测,另外定义宏时,需要时刻注意加括号,除此之外,当传入变量自增时,会出现不可避免的错误。2)C++中宏不能作为类的成员函数,因为预处理器不能访问类成员。

      内联函数主要为了替代宏,另外,类中的成员函数默认加了inline。

    1 inline void func(); //声明
    2 
    3 inline void func(){ //定义时也必须加上inline
    4    cout << "none" << endl;         
    5 }

      以下情况不能使用内联函数:1)不能存在任何形式的循环语句;2)不能存在过多的条件判断语句;3)函数体不能过于庞大;4)不能对函数进行取址操作,因为内联函数直接将函数体替换掉,本来就丢了函数入口,再次取地址没有意义。

      另外,内联函数对于编译器而言只是一个建议,编译器不一定会接受这种建议,即使没有声明内联函数,编译器可能也会内联一些小的简单的函数。

    函数默认参数和占位参数

    这个东西用到的时候比较少,函数默认参数,如果有一个位置有了默认值,那么从后逐个位置开始,从左往右都必须有默认值,另外函数声明和实现只能有一个默认值,否则会不明确,报错

    函数占位参数,也可以有默认值,另外C语言中没有默认参数和占位参数

    void test(int a){
      cout << "what"<< endl;  
    }

    当函数中有占位参数时,调用时必须提供这个参数

    函数重载

      C++的函数名称可以重复,称为函数重载。

      注意事项:1)其中必须在同一作用域下的函数名称相同,不能是一个在全局,一个局部,或者不同的代码块中;2)可以根据函数参数的个数、类型(const也可以作为重载条件)、顺序不同进行函数重载,但不能用函数返回值进行重载。3)当函数重载遇到函数默认参数时,要注意二义性。

     1 class Animal_{
     2     void func(){};//这个函数跟其他函数不在一个作用域,不叫重载
     3 };
     4 
     5 void func(){
     6     cout << "what?
    " << endl;
     7 }
     8 
     9 void func(int a){
    10     cout << "what?
    " << endl;
    11 }
    12 
    13 void func(int a, char b = 'c'){//有默认参数时,需要注意二义性,因为调用时只传入一个a就gg了
    14     cout << "what?
    " << endl;
    15 }
    16 
    17 void func(double b){
    18     cout << "what?
    " << endl;
    19 }
    20 
    21 void func(int a, double b){
    22     cout << "what?
    " << endl;
    23 }
    24 //引用重载
    25 void func2(int &a){
    26     cout << "int &a
    " << endl;
    27 }
    28 
    29 void func2(const int &a){
    30     cout << "const
    " << endl;
    31 }
    32 
    33 
    34 int main(){
    35     int a = 20;
    36     func2(a); //输出int &a
    37     func2(10); //输出const,因为调用int &a的函数不合法,引用没有分配内存
    38     system("pause");
    39     return 0;
    40 }
  • 相关阅读:
    python requests用法总结
    Linux统计某文件夹下文件的个数
    PM2使用及介绍
    如何区分USB 2.0 和USB 3.0插口
    npm突然找不到npm-cli.js的解决方法
    mRemoteNG
    js中几种实用的跨域方法原理详解
    Tornado异步阻塞解决方案
    [阅读笔记]EfficientDet
    iOS 保存视频AVAssetWriter
  • 原文地址:https://www.cnblogs.com/qinguoyi/p/10216167.html
Copyright © 2020-2023  润新知