| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 内联函数的用法auto注意事项 -> 正文阅读 |
|
[C++知识库]内联函数的用法auto注意事项 |
以
inline
修饰
的函数叫做内联函数,
编译时
C++
编译器会在
调用内联函数的地方展开
,没有函数压
栈的开销,
内联函数提升程序运行的效率。
inline
是一种
以空间换时间
的做法,省去调用函数额开销。所以
代码很长
或者有
循环
/
递归
的函数不适宜 使用作为内联函数。
inline
对于编译器而言只是一个建议
,编译器会自动优化,如果定义为
inline
的函数体内有循环
/
递归等 等,编译器优化时会忽略掉内联。
1.
在
release
模式下,查看编译器生成的汇编代码中是否存在
call Add(这个就是函数调用时的压栈过程)
2.
在
debug
模式下,需要对编译器进行设置,否则不会展开
(
因为
debug
模式下,编译器默认不会对代码进 行优化,以下给出vs2013
的设置方式)
inline
不建议声明和定义分离,分离会导致链接错误。因为
inline
被展开,就没有函数地址了,链接就会 找不到。
不能将内联函数的声明像普通函数一样写在头文件里
拓展:内联函数和宏很类似,而区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的(可调试)。而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。可以像调用函数一样来调用内联函数,而不必担心会产生于处理宏的一些问题。 ?
宏的优缺点?
优点:
1.
增强代码的复用性。
2.
提高性能。
缺点:
1.
不方便调试宏。(因为预编译阶段进行了替换)
2.
导致代码可读性差,可维护性差,容易误用。
3.
没有类型安全的检查 。
C++
有哪些技术替代宏
?
1.
常量定义 换用
const
int main()
{ ?? ?//const修饰的常量具有宏替换的特性 ?? ?const int a = 10; ?? ?int* p = (int*)&a; //&a本来时int const*类型的,经过强转后才能改变 ?? ?*p = 100; ?? ?cout << a << endl; ? //宏替换特性,打印10 ?? ?cout << *p << endl; ? //打印100 ?? ?return 0; }
2.
函数定义 换用内联函数
auto的注意事项
auto声明的变量必须由编译器在编译时期推导而得。
使用auto定义变量时必须对其进行初始化,这样编译器才能推演出来.在编译阶段编译器需要根据初始化表达式来推导auto的实际类 型。因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译期会将auto替换为 变量实际的类型。
用
auto
声明指针类型时,用
auto
和
auto*
没有任何区别,但用
auto
声明引用类型时则必须加
&
没有使用auto&的相当于给一个变量赋值.并不是引用?
当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对
第一个类型进行推导,然后用推导出来的类型定义其他变量
。
auto
不能作为函数的参数
auto
不能直接用来声明数组
auto可以方便对整个数组操作:注意是数组所有的值
? ? ?int arr[] = { 1,2,3,4 };
?? ?for (auto& e : arr) ?//给数组每个值都×2要加上& ?? ?{ ?? ??? ?e *= 2; ?? ?} ?? ?for (auto &e : arr)//打印数组的值,&可有可没有 ?? ?{ ?? ??? ?cout << e << endl; ?? ?} |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 2:40:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |