博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内联函数和函数重载
阅读量:7122 次
发布时间:2019-06-28

本文共 1576 字,大约阅读时间需要 5 分钟。

内联函数

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

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

1 inline void func(); //声明2 3 inline void func(){ //定义时也必须加上inline4    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?\n" << endl; 7 } 8  9 void func(int a){10     cout << "what?\n" << endl;11 }12 13 void func(int a, char b = 'c'){
//有默认参数时,需要注意二义性,因为调用时只传入一个a就gg了14 cout << "what?\n" << endl;15 }16 17 void func(double b){18 cout << "what?\n" << endl;19 }20 21 void func(int a, double b){22 cout << "what?\n" << endl;23 }24 //引用重载25 void func2(int &a){26 cout << "int &a\n" << endl;27 }28 29 void func2(const int &a){30 cout << "const\n" << endl;31 }32 33 34 int main(){35 int a = 20;36 func2(a); //输出int &a37 func2(10); //输出const,因为调用int &a的函数不合法,引用没有分配内存38 system("pause");39 return 0;40 }

 

转载于:https://www.cnblogs.com/qinguoyi/p/10216167.html

你可能感兴趣的文章
智慧城市安全问题初探
查看>>
打造NFV环境下的专属性能
查看>>
测试用例编写规范
查看>>
SWIFT系统第三家银行曝遭网络劫匪抢走1200万美元
查看>>
Java的GC机制
查看>>
espresso系列3--测试实践
查看>>
espresso基础架构与API分析
查看>>
《Python语言程序设计》——2.15 本章总结
查看>>
《音乐达人秀:Adobe Audition CC实战222例》——实例5 麦克风说话和音乐播放等所有声音都混合录制...
查看>>
TIOBE 9 月编程语言排行榜,新 TIOBE 指数算法
查看>>
《Adobe Photoshop CC经典教程》—第2课2.6节使用Spot Healing Brush工具
查看>>
《AngularJS实战》——2.3 Angular中的模板
查看>>
《Node.js区块链开发》——2.5 风险提示
查看>>
《ANSYS 14热力学/电磁学/耦合场分析自学手册》——2.9 图形窗口
查看>>
阿里 MySQL 团队加入参与 WebScaleSQL 开发
查看>>
《Adobe After Effects CC经典教程》——2.3 创建新合成图像
查看>>
提高 PHP 代码质量的 36 计
查看>>
《Adobe Premiere Pro CS4经典教程》——1.4 提供标准的数字视频工作流
查看>>
《CCNP TSHOOT 300-135学习指南》——1.4节本章小结
查看>>
诺基亚将更名为微软移动
查看>>