免费行情软件app网站直播下载,上海普陀门户网站,江苏建设管理信息网站,产品结构设计文章目录 前言#x1f31f;一、内联函数#x1f30f;1.1.面试题#x1f30f;1.2.内联函数概念#x1f30f;1.3.内联函数特性 #x1f31f;二、auto关键字#x1f30f;2.1.类型别名思考#x1f30f;2.2.auto简介#x1f30f;2.3.auto的使用细节#x1f30f;2.4.auto不能… 文章目录 前言一、内联函数1.1.面试题1.2.内联函数概念1.3.内联函数特性 二、auto关键字2.1.类型别名思考2.2.auto简介2.3.auto的使用细节2.4.auto不能推导的场景2.5.小场景补充 三、基于范围的for循环3.1.范围for的语法3.2.范围for的使用条件 四、指针空值nullptr 前言 个人主页小沈YO. 小编介绍欢迎来到我的乱七八糟小星球 专栏C 心愿便利店 本章内容内联函数、auto、范围for、nullptr 记得 评论 点赞 收藏 关注哦~ 提示以下是本篇文章正文内容下面案例可供参考
一、内联函数 #mermaid-svg-EBs3DkVmbwsL96ME {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-EBs3DkVmbwsL96ME .error-icon{fill:#552222;}#mermaid-svg-EBs3DkVmbwsL96ME .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-EBs3DkVmbwsL96ME .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-EBs3DkVmbwsL96ME .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-EBs3DkVmbwsL96ME .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-EBs3DkVmbwsL96ME .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-EBs3DkVmbwsL96ME .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-EBs3DkVmbwsL96ME .marker{fill:#333333;stroke:#333333;}#mermaid-svg-EBs3DkVmbwsL96ME .marker.cross{stroke:#333333;}#mermaid-svg-EBs3DkVmbwsL96ME svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-EBs3DkVmbwsL96ME .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-EBs3DkVmbwsL96ME .cluster-label text{fill:#333;}#mermaid-svg-EBs3DkVmbwsL96ME .cluster-label span{color:#333;}#mermaid-svg-EBs3DkVmbwsL96ME .label text,#mermaid-svg-EBs3DkVmbwsL96ME span{fill:#333;color:#333;}#mermaid-svg-EBs3DkVmbwsL96ME .node rect,#mermaid-svg-EBs3DkVmbwsL96ME .node circle,#mermaid-svg-EBs3DkVmbwsL96ME .node ellipse,#mermaid-svg-EBs3DkVmbwsL96ME .node polygon,#mermaid-svg-EBs3DkVmbwsL96ME .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-EBs3DkVmbwsL96ME .node .label{text-align:center;}#mermaid-svg-EBs3DkVmbwsL96ME .node.clickable{cursor:pointer;}#mermaid-svg-EBs3DkVmbwsL96ME .arrowheadPath{fill:#333333;}#mermaid-svg-EBs3DkVmbwsL96ME .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-EBs3DkVmbwsL96ME .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-EBs3DkVmbwsL96ME .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-EBs3DkVmbwsL96ME .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-EBs3DkVmbwsL96ME .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-EBs3DkVmbwsL96ME .cluster text{fill:#333;}#mermaid-svg-EBs3DkVmbwsL96ME .cluster span{color:#333;}#mermaid-svg-EBs3DkVmbwsL96ME div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-EBs3DkVmbwsL96ME :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 内联函数 1.1.面试题 #mermaid-svg-1np7ed1K9mCAEHXb {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1np7ed1K9mCAEHXb .error-icon{fill:#552222;}#mermaid-svg-1np7ed1K9mCAEHXb .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1np7ed1K9mCAEHXb .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-1np7ed1K9mCAEHXb .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1np7ed1K9mCAEHXb .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1np7ed1K9mCAEHXb .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1np7ed1K9mCAEHXb .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1np7ed1K9mCAEHXb .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1np7ed1K9mCAEHXb .marker.cross{stroke:#333333;}#mermaid-svg-1np7ed1K9mCAEHXb svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1np7ed1K9mCAEHXb .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-1np7ed1K9mCAEHXb .cluster-label text{fill:#333;}#mermaid-svg-1np7ed1K9mCAEHXb .cluster-label span{color:#333;}#mermaid-svg-1np7ed1K9mCAEHXb .label text,#mermaid-svg-1np7ed1K9mCAEHXb span{fill:#333;color:#333;}#mermaid-svg-1np7ed1K9mCAEHXb .node rect,#mermaid-svg-1np7ed1K9mCAEHXb .node circle,#mermaid-svg-1np7ed1K9mCAEHXb .node ellipse,#mermaid-svg-1np7ed1K9mCAEHXb .node polygon,#mermaid-svg-1np7ed1K9mCAEHXb .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-1np7ed1K9mCAEHXb .node .label{text-align:center;}#mermaid-svg-1np7ed1K9mCAEHXb .node.clickable{cursor:pointer;}#mermaid-svg-1np7ed1K9mCAEHXb .arrowheadPath{fill:#333333;}#mermaid-svg-1np7ed1K9mCAEHXb .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-1np7ed1K9mCAEHXb .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-1np7ed1K9mCAEHXb .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-1np7ed1K9mCAEHXb .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-1np7ed1K9mCAEHXb .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-1np7ed1K9mCAEHXb .cluster text{fill:#333;}#mermaid-svg-1np7ed1K9mCAEHXb .cluster span{color:#333;}#mermaid-svg-1np7ed1K9mCAEHXb div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-1np7ed1K9mCAEHXb :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 面试题 通过对C语言的学习对于宏有了一定的了解当定义一个宏常量是是非常方便的直接替换这在数据结构链表处有明显的体现但是对于宏函数的写法就比较容易出错有以下几种形式的错误需要提醒 #define N 10//宏常量
//宏函数
#define ADD(int x , int y) {return xy;}//宏的调用不需要return
#define ADD(x , y) (return xy;)
#define ADD(x , y) return xy;#define ADD(x , y) xy;//宏后面不需要分号
//加分号是可以的但对于有些语法是不通过的
int main()
{ADD(1, 2);//这种是不会报错的printf(%d\n, ADD(1, 2));//这种会报错因为宏替换后会多出一个分号return 0;
}#define ADD(x , y) xy//可能出现优先级错误
int main()
{ADD(1, 2);printf(%d\n, ADD(1, 2));printf(%d\n, ADD(1, 2) * 3);//这里替换后变成了12*37显然不是想要得到的9return 0;
}#define ADD(x , y) (xy)//可能出现优先级错误
int main()
{ADD(1, 2);printf(%d\n, ADD(1, 2));printf(%d\n, ADD(1, 2) * 3);int a 1, b 2;ADD(a | b, a b);//替换后变成(a|bab) 号的优先级高于| 所以会先算return 0;
}#define ADD(x , y) ((x)(y)) 这是正确的#mermaid-svg-hxKjOZuryV2DAvyz {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hxKjOZuryV2DAvyz .error-icon{fill:#552222;}#mermaid-svg-hxKjOZuryV2DAvyz .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hxKjOZuryV2DAvyz .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-hxKjOZuryV2DAvyz .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hxKjOZuryV2DAvyz .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hxKjOZuryV2DAvyz .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hxKjOZuryV2DAvyz .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hxKjOZuryV2DAvyz .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hxKjOZuryV2DAvyz .marker.cross{stroke:#333333;}#mermaid-svg-hxKjOZuryV2DAvyz svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hxKjOZuryV2DAvyz .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-hxKjOZuryV2DAvyz .cluster-label text{fill:#333;}#mermaid-svg-hxKjOZuryV2DAvyz .cluster-label span{color:#333;}#mermaid-svg-hxKjOZuryV2DAvyz .label text,#mermaid-svg-hxKjOZuryV2DAvyz span{fill:#333;color:#333;}#mermaid-svg-hxKjOZuryV2DAvyz .node rect,#mermaid-svg-hxKjOZuryV2DAvyz .node circle,#mermaid-svg-hxKjOZuryV2DAvyz .node ellipse,#mermaid-svg-hxKjOZuryV2DAvyz .node polygon,#mermaid-svg-hxKjOZuryV2DAvyz .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hxKjOZuryV2DAvyz .node .label{text-align:center;}#mermaid-svg-hxKjOZuryV2DAvyz .node.clickable{cursor:pointer;}#mermaid-svg-hxKjOZuryV2DAvyz .arrowheadPath{fill:#333333;}#mermaid-svg-hxKjOZuryV2DAvyz .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-hxKjOZuryV2DAvyz .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-hxKjOZuryV2DAvyz .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-hxKjOZuryV2DAvyz .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-hxKjOZuryV2DAvyz .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hxKjOZuryV2DAvyz .cluster text{fill:#333;}#mermaid-svg-hxKjOZuryV2DAvyz .cluster span{color:#333;}#mermaid-svg-hxKjOZuryV2DAvyz div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-hxKjOZuryV2DAvyz :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 1. 宏的优缺点 宏的优缺点 优点 1.增强代码的复用性。 2.提高性能。 缺点 1.不方便调试宏。因为预编译阶段进行了替换 2.导致代码可读性差可维护性差容易误用语法很坑。 3.没有类型安全的检查 。 宏函数的优点: 1.没有类型的严格限制 2.针对频繁调用小函数不需要再建立栈帧提高了效率 int Add(int left, int right)
//这种函数调用是需要建立栈帧的但是宏函数不需要直接替换了
{return left right;
}#mermaid-svg-QTl60HKtYeZXQ0KS {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QTl60HKtYeZXQ0KS .error-icon{fill:#552222;}#mermaid-svg-QTl60HKtYeZXQ0KS .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QTl60HKtYeZXQ0KS .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-QTl60HKtYeZXQ0KS .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QTl60HKtYeZXQ0KS .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QTl60HKtYeZXQ0KS .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QTl60HKtYeZXQ0KS .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QTl60HKtYeZXQ0KS .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QTl60HKtYeZXQ0KS .marker.cross{stroke:#333333;}#mermaid-svg-QTl60HKtYeZXQ0KS svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QTl60HKtYeZXQ0KS .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-QTl60HKtYeZXQ0KS .cluster-label text{fill:#333;}#mermaid-svg-QTl60HKtYeZXQ0KS .cluster-label span{color:#333;}#mermaid-svg-QTl60HKtYeZXQ0KS .label text,#mermaid-svg-QTl60HKtYeZXQ0KS span{fill:#333;color:#333;}#mermaid-svg-QTl60HKtYeZXQ0KS .node rect,#mermaid-svg-QTl60HKtYeZXQ0KS .node circle,#mermaid-svg-QTl60HKtYeZXQ0KS .node ellipse,#mermaid-svg-QTl60HKtYeZXQ0KS .node polygon,#mermaid-svg-QTl60HKtYeZXQ0KS .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-QTl60HKtYeZXQ0KS .node .label{text-align:center;}#mermaid-svg-QTl60HKtYeZXQ0KS .node.clickable{cursor:pointer;}#mermaid-svg-QTl60HKtYeZXQ0KS .arrowheadPath{fill:#333333;}#mermaid-svg-QTl60HKtYeZXQ0KS .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-QTl60HKtYeZXQ0KS .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-QTl60HKtYeZXQ0KS .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-QTl60HKtYeZXQ0KS .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-QTl60HKtYeZXQ0KS .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-QTl60HKtYeZXQ0KS .cluster text{fill:#333;}#mermaid-svg-QTl60HKtYeZXQ0KS .cluster span{color:#333;}#mermaid-svg-QTl60HKtYeZXQ0KS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-QTl60HKtYeZXQ0KS :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 2. C有哪些技术替代宏 C有哪些技术替代宏 常量定义 换用const enum短小函数定义 换用内联函数 1.2.内联函数概念 #mermaid-svg-9CnDRpdXprPeRXlv {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-9CnDRpdXprPeRXlv .error-icon{fill:#552222;}#mermaid-svg-9CnDRpdXprPeRXlv .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-9CnDRpdXprPeRXlv .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-9CnDRpdXprPeRXlv .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-9CnDRpdXprPeRXlv .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-9CnDRpdXprPeRXlv .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-9CnDRpdXprPeRXlv .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-9CnDRpdXprPeRXlv .marker{fill:#333333;stroke:#333333;}#mermaid-svg-9CnDRpdXprPeRXlv .marker.cross{stroke:#333333;}#mermaid-svg-9CnDRpdXprPeRXlv svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-9CnDRpdXprPeRXlv .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-9CnDRpdXprPeRXlv .cluster-label text{fill:#333;}#mermaid-svg-9CnDRpdXprPeRXlv .cluster-label span{color:#333;}#mermaid-svg-9CnDRpdXprPeRXlv .label text,#mermaid-svg-9CnDRpdXprPeRXlv span{fill:#333;color:#333;}#mermaid-svg-9CnDRpdXprPeRXlv .node rect,#mermaid-svg-9CnDRpdXprPeRXlv .node circle,#mermaid-svg-9CnDRpdXprPeRXlv .node ellipse,#mermaid-svg-9CnDRpdXprPeRXlv .node polygon,#mermaid-svg-9CnDRpdXprPeRXlv .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-9CnDRpdXprPeRXlv .node .label{text-align:center;}#mermaid-svg-9CnDRpdXprPeRXlv .node.clickable{cursor:pointer;}#mermaid-svg-9CnDRpdXprPeRXlv .arrowheadPath{fill:#333333;}#mermaid-svg-9CnDRpdXprPeRXlv .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-9CnDRpdXprPeRXlv .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-9CnDRpdXprPeRXlv .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-9CnDRpdXprPeRXlv .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-9CnDRpdXprPeRXlv .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-9CnDRpdXprPeRXlv .cluster text{fill:#333;}#mermaid-svg-9CnDRpdXprPeRXlv .cluster span{color:#333;}#mermaid-svg-9CnDRpdXprPeRXlv div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-9CnDRpdXprPeRXlv :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 内联函数的概念 以inline修饰的函数叫做内联函数编译时C编译器会在调用内联函数的地方展开没有函数调用建立栈帧的开销内联函数提升程序运行的效率。 如果在上述函数前增加inline关键字将其改成内联函数在编译期间编译器会用函数体替换函数的调用。 #mermaid-svg-UK9gfrEEzGcBRPqn {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-UK9gfrEEzGcBRPqn .error-icon{fill:#552222;}#mermaid-svg-UK9gfrEEzGcBRPqn .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UK9gfrEEzGcBRPqn .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-UK9gfrEEzGcBRPqn .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UK9gfrEEzGcBRPqn .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UK9gfrEEzGcBRPqn .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UK9gfrEEzGcBRPqn .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UK9gfrEEzGcBRPqn .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UK9gfrEEzGcBRPqn .marker.cross{stroke:#333333;}#mermaid-svg-UK9gfrEEzGcBRPqn svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UK9gfrEEzGcBRPqn .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-UK9gfrEEzGcBRPqn .cluster-label text{fill:#333;}#mermaid-svg-UK9gfrEEzGcBRPqn .cluster-label span{color:#333;}#mermaid-svg-UK9gfrEEzGcBRPqn .label text,#mermaid-svg-UK9gfrEEzGcBRPqn span{fill:#333;color:#333;}#mermaid-svg-UK9gfrEEzGcBRPqn .node rect,#mermaid-svg-UK9gfrEEzGcBRPqn .node circle,#mermaid-svg-UK9gfrEEzGcBRPqn .node ellipse,#mermaid-svg-UK9gfrEEzGcBRPqn .node polygon,#mermaid-svg-UK9gfrEEzGcBRPqn .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UK9gfrEEzGcBRPqn .node .label{text-align:center;}#mermaid-svg-UK9gfrEEzGcBRPqn .node.clickable{cursor:pointer;}#mermaid-svg-UK9gfrEEzGcBRPqn .arrowheadPath{fill:#333333;}#mermaid-svg-UK9gfrEEzGcBRPqn .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-UK9gfrEEzGcBRPqn .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-UK9gfrEEzGcBRPqn .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-UK9gfrEEzGcBRPqn .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-UK9gfrEEzGcBRPqn .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-UK9gfrEEzGcBRPqn .cluster text{fill:#333;}#mermaid-svg-UK9gfrEEzGcBRPqn .cluster span{color:#333;}#mermaid-svg-UK9gfrEEzGcBRPqn div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-UK9gfrEEzGcBRPqn :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 查看方式: 在release模式下查看编译器生成的汇编代码中是否存在call Add在debug模式下需要对编译器进行设置否则不会展开(因为debug模式下编译器默认不会对代码进行优化以下给出vs2013的设置方式) #mermaid-svg-bVZtAY9F7FsZI5Wx {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-bVZtAY9F7FsZI5Wx .error-icon{fill:#552222;}#mermaid-svg-bVZtAY9F7FsZI5Wx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-bVZtAY9F7FsZI5Wx .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-bVZtAY9F7FsZI5Wx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-bVZtAY9F7FsZI5Wx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-bVZtAY9F7FsZI5Wx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-bVZtAY9F7FsZI5Wx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-bVZtAY9F7FsZI5Wx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-bVZtAY9F7FsZI5Wx .marker.cross{stroke:#333333;}#mermaid-svg-bVZtAY9F7FsZI5Wx svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-bVZtAY9F7FsZI5Wx .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-bVZtAY9F7FsZI5Wx .cluster-label text{fill:#333;}#mermaid-svg-bVZtAY9F7FsZI5Wx .cluster-label span{color:#333;}#mermaid-svg-bVZtAY9F7FsZI5Wx .label text,#mermaid-svg-bVZtAY9F7FsZI5Wx span{fill:#333;color:#333;}#mermaid-svg-bVZtAY9F7FsZI5Wx .node rect,#mermaid-svg-bVZtAY9F7FsZI5Wx .node circle,#mermaid-svg-bVZtAY9F7FsZI5Wx .node ellipse,#mermaid-svg-bVZtAY9F7FsZI5Wx .node polygon,#mermaid-svg-bVZtAY9F7FsZI5Wx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-bVZtAY9F7FsZI5Wx .node .label{text-align:center;}#mermaid-svg-bVZtAY9F7FsZI5Wx .node.clickable{cursor:pointer;}#mermaid-svg-bVZtAY9F7FsZI5Wx .arrowheadPath{fill:#333333;}#mermaid-svg-bVZtAY9F7FsZI5Wx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-bVZtAY9F7FsZI5Wx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-bVZtAY9F7FsZI5Wx .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-bVZtAY9F7FsZI5Wx .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-bVZtAY9F7FsZI5Wx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-bVZtAY9F7FsZI5Wx .cluster text{fill:#333;}#mermaid-svg-bVZtAY9F7FsZI5Wx .cluster span{color:#333;}#mermaid-svg-bVZtAY9F7FsZI5Wx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-bVZtAY9F7FsZI5Wx :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 代码示例: inline int add(int x, int y)
{return x y;
}
int main()
{int a 1, b 2;int ret add(1, 2);//int ret add(a | b , a b);//这样写也不会像宏函数一样出错了printf(%d\n, ret);return 0;
}1.3.内联函数特性 #mermaid-svg-op3OpiXww6dAGdGi {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-op3OpiXww6dAGdGi .error-icon{fill:#552222;}#mermaid-svg-op3OpiXww6dAGdGi .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-op3OpiXww6dAGdGi .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-op3OpiXww6dAGdGi .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-op3OpiXww6dAGdGi .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-op3OpiXww6dAGdGi .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-op3OpiXww6dAGdGi .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-op3OpiXww6dAGdGi .marker{fill:#333333;stroke:#333333;}#mermaid-svg-op3OpiXww6dAGdGi .marker.cross{stroke:#333333;}#mermaid-svg-op3OpiXww6dAGdGi svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-op3OpiXww6dAGdGi .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-op3OpiXww6dAGdGi .cluster-label text{fill:#333;}#mermaid-svg-op3OpiXww6dAGdGi .cluster-label span{color:#333;}#mermaid-svg-op3OpiXww6dAGdGi .label text,#mermaid-svg-op3OpiXww6dAGdGi span{fill:#333;color:#333;}#mermaid-svg-op3OpiXww6dAGdGi .node rect,#mermaid-svg-op3OpiXww6dAGdGi .node circle,#mermaid-svg-op3OpiXww6dAGdGi .node ellipse,#mermaid-svg-op3OpiXww6dAGdGi .node polygon,#mermaid-svg-op3OpiXww6dAGdGi .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-op3OpiXww6dAGdGi .node .label{text-align:center;}#mermaid-svg-op3OpiXww6dAGdGi .node.clickable{cursor:pointer;}#mermaid-svg-op3OpiXww6dAGdGi .arrowheadPath{fill:#333333;}#mermaid-svg-op3OpiXww6dAGdGi .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-op3OpiXww6dAGdGi .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-op3OpiXww6dAGdGi .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-op3OpiXww6dAGdGi .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-op3OpiXww6dAGdGi .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-op3OpiXww6dAGdGi .cluster text{fill:#333;}#mermaid-svg-op3OpiXww6dAGdGi .cluster span{color:#333;}#mermaid-svg-op3OpiXww6dAGdGi div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-op3OpiXww6dAGdGi :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 内联函数的特性 #mermaid-svg-hw9yeOhAJXRVUavB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hw9yeOhAJXRVUavB .error-icon{fill:#552222;}#mermaid-svg-hw9yeOhAJXRVUavB .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hw9yeOhAJXRVUavB .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-hw9yeOhAJXRVUavB .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hw9yeOhAJXRVUavB .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hw9yeOhAJXRVUavB .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hw9yeOhAJXRVUavB .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hw9yeOhAJXRVUavB .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hw9yeOhAJXRVUavB .marker.cross{stroke:#333333;}#mermaid-svg-hw9yeOhAJXRVUavB svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hw9yeOhAJXRVUavB .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-hw9yeOhAJXRVUavB .cluster-label text{fill:#333;}#mermaid-svg-hw9yeOhAJXRVUavB .cluster-label span{color:#333;}#mermaid-svg-hw9yeOhAJXRVUavB .label text,#mermaid-svg-hw9yeOhAJXRVUavB span{fill:#333;color:#333;}#mermaid-svg-hw9yeOhAJXRVUavB .node rect,#mermaid-svg-hw9yeOhAJXRVUavB .node circle,#mermaid-svg-hw9yeOhAJXRVUavB .node ellipse,#mermaid-svg-hw9yeOhAJXRVUavB .node polygon,#mermaid-svg-hw9yeOhAJXRVUavB .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hw9yeOhAJXRVUavB .node .label{text-align:center;}#mermaid-svg-hw9yeOhAJXRVUavB .node.clickable{cursor:pointer;}#mermaid-svg-hw9yeOhAJXRVUavB .arrowheadPath{fill:#333333;}#mermaid-svg-hw9yeOhAJXRVUavB .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-hw9yeOhAJXRVUavB .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-hw9yeOhAJXRVUavB .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-hw9yeOhAJXRVUavB .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-hw9yeOhAJXRVUavB .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hw9yeOhAJXRVUavB .cluster text{fill:#333;}#mermaid-svg-hw9yeOhAJXRVUavB .cluster span{color:#333;}#mermaid-svg-hw9yeOhAJXRVUavB div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-hw9yeOhAJXRVUavB :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 特性1: inline是一种以空间换时间的做法如果编译器将函数当成内联函数处理在编译阶段会用函数体替换函数调用缺陷可能会使目标文件变大代码膨胀优势少了调用开销提高程序运行效率。不能任何情况下都用内联 #mermaid-svg-UHz7IGHXjoo9uJ2a {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-UHz7IGHXjoo9uJ2a .error-icon{fill:#552222;}#mermaid-svg-UHz7IGHXjoo9uJ2a .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UHz7IGHXjoo9uJ2a .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-UHz7IGHXjoo9uJ2a .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UHz7IGHXjoo9uJ2a .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UHz7IGHXjoo9uJ2a .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UHz7IGHXjoo9uJ2a .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UHz7IGHXjoo9uJ2a .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UHz7IGHXjoo9uJ2a .marker.cross{stroke:#333333;}#mermaid-svg-UHz7IGHXjoo9uJ2a svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UHz7IGHXjoo9uJ2a .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-UHz7IGHXjoo9uJ2a .cluster-label text{fill:#333;}#mermaid-svg-UHz7IGHXjoo9uJ2a .cluster-label span{color:#333;}#mermaid-svg-UHz7IGHXjoo9uJ2a .label text,#mermaid-svg-UHz7IGHXjoo9uJ2a span{fill:#333;color:#333;}#mermaid-svg-UHz7IGHXjoo9uJ2a .node rect,#mermaid-svg-UHz7IGHXjoo9uJ2a .node circle,#mermaid-svg-UHz7IGHXjoo9uJ2a .node ellipse,#mermaid-svg-UHz7IGHXjoo9uJ2a .node polygon,#mermaid-svg-UHz7IGHXjoo9uJ2a .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UHz7IGHXjoo9uJ2a .node .label{text-align:center;}#mermaid-svg-UHz7IGHXjoo9uJ2a .node.clickable{cursor:pointer;}#mermaid-svg-UHz7IGHXjoo9uJ2a .arrowheadPath{fill:#333333;}#mermaid-svg-UHz7IGHXjoo9uJ2a .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-UHz7IGHXjoo9uJ2a .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-UHz7IGHXjoo9uJ2a .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-UHz7IGHXjoo9uJ2a .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-UHz7IGHXjoo9uJ2a .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-UHz7IGHXjoo9uJ2a .cluster text{fill:#333;}#mermaid-svg-UHz7IGHXjoo9uJ2a .cluster span{color:#333;}#mermaid-svg-UHz7IGHXjoo9uJ2a div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-UHz7IGHXjoo9uJ2a :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 特性2: inline对于编译器而言只是一个建议不同编译器关于inline实现机制可能不同一般建议将函数规模较小(即函数不是很长具体没有准确的说法取决于编译器内部实现)、不是递归、且频繁调用的函数采用inline修饰否则编译器会忽略inline特性。下图为《Cprime》第五版关于inline的建议 #mermaid-svg-gF0JLIzFbkObVmdN {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-gF0JLIzFbkObVmdN .error-icon{fill:#552222;}#mermaid-svg-gF0JLIzFbkObVmdN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-gF0JLIzFbkObVmdN .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-gF0JLIzFbkObVmdN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-gF0JLIzFbkObVmdN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-gF0JLIzFbkObVmdN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-gF0JLIzFbkObVmdN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-gF0JLIzFbkObVmdN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-gF0JLIzFbkObVmdN .marker.cross{stroke:#333333;}#mermaid-svg-gF0JLIzFbkObVmdN svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-gF0JLIzFbkObVmdN .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-gF0JLIzFbkObVmdN .cluster-label text{fill:#333;}#mermaid-svg-gF0JLIzFbkObVmdN .cluster-label span{color:#333;}#mermaid-svg-gF0JLIzFbkObVmdN .label text,#mermaid-svg-gF0JLIzFbkObVmdN span{fill:#333;color:#333;}#mermaid-svg-gF0JLIzFbkObVmdN .node rect,#mermaid-svg-gF0JLIzFbkObVmdN .node circle,#mermaid-svg-gF0JLIzFbkObVmdN .node ellipse,#mermaid-svg-gF0JLIzFbkObVmdN .node polygon,#mermaid-svg-gF0JLIzFbkObVmdN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-gF0JLIzFbkObVmdN .node .label{text-align:center;}#mermaid-svg-gF0JLIzFbkObVmdN .node.clickable{cursor:pointer;}#mermaid-svg-gF0JLIzFbkObVmdN .arrowheadPath{fill:#333333;}#mermaid-svg-gF0JLIzFbkObVmdN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-gF0JLIzFbkObVmdN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-gF0JLIzFbkObVmdN .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-gF0JLIzFbkObVmdN .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-gF0JLIzFbkObVmdN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-gF0JLIzFbkObVmdN .cluster text{fill:#333;}#mermaid-svg-gF0JLIzFbkObVmdN .cluster span{color:#333;}#mermaid-svg-gF0JLIzFbkObVmdN div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-gF0JLIzFbkObVmdN :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 内联说明只是向编译器发出的一个请求,编译器可以选择忽略这个请求 一般来说内联机制用于优化规模较小、流程直接、频繁调用的函数。很多编译器都不支持内联递归函数而且一个75行的函数也不大可能在调用点内联地展开。 #mermaid-svg-CeYlWwCFkEQxrSMZ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-CeYlWwCFkEQxrSMZ .error-icon{fill:#552222;}#mermaid-svg-CeYlWwCFkEQxrSMZ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-CeYlWwCFkEQxrSMZ .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-CeYlWwCFkEQxrSMZ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-CeYlWwCFkEQxrSMZ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-CeYlWwCFkEQxrSMZ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-CeYlWwCFkEQxrSMZ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-CeYlWwCFkEQxrSMZ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-CeYlWwCFkEQxrSMZ .marker.cross{stroke:#333333;}#mermaid-svg-CeYlWwCFkEQxrSMZ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-CeYlWwCFkEQxrSMZ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-CeYlWwCFkEQxrSMZ .cluster-label text{fill:#333;}#mermaid-svg-CeYlWwCFkEQxrSMZ .cluster-label span{color:#333;}#mermaid-svg-CeYlWwCFkEQxrSMZ .label text,#mermaid-svg-CeYlWwCFkEQxrSMZ span{fill:#333;color:#333;}#mermaid-svg-CeYlWwCFkEQxrSMZ .node rect,#mermaid-svg-CeYlWwCFkEQxrSMZ .node circle,#mermaid-svg-CeYlWwCFkEQxrSMZ .node ellipse,#mermaid-svg-CeYlWwCFkEQxrSMZ .node polygon,#mermaid-svg-CeYlWwCFkEQxrSMZ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-CeYlWwCFkEQxrSMZ .node .label{text-align:center;}#mermaid-svg-CeYlWwCFkEQxrSMZ .node.clickable{cursor:pointer;}#mermaid-svg-CeYlWwCFkEQxrSMZ .arrowheadPath{fill:#333333;}#mermaid-svg-CeYlWwCFkEQxrSMZ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-CeYlWwCFkEQxrSMZ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-CeYlWwCFkEQxrSMZ .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-CeYlWwCFkEQxrSMZ .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-CeYlWwCFkEQxrSMZ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-CeYlWwCFkEQxrSMZ .cluster text{fill:#333;}#mermaid-svg-CeYlWwCFkEQxrSMZ .cluster span{color:#333;}#mermaid-svg-CeYlWwCFkEQxrSMZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-CeYlWwCFkEQxrSMZ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 1. 太长就不会展开: inline int add(int x, int y)
{return x y;
}
inline int func()
{int x1 0;int x2 0;int x3 0;int x4 0;int ret 0;ret x1;ret * x2;ret / x3;ret / x3;ret / x3;ret x1;ret x1;return ret;
}
int main()
{int a 1, b 2;//int ret add(1, 2);int ret add(a | b , a b);printf(%d\n, ret);ret func();return 0;
}#mermaid-svg-hjFGdtANWZRNbdme {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hjFGdtANWZRNbdme .error-icon{fill:#552222;}#mermaid-svg-hjFGdtANWZRNbdme .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hjFGdtANWZRNbdme .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-hjFGdtANWZRNbdme .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hjFGdtANWZRNbdme .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hjFGdtANWZRNbdme .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hjFGdtANWZRNbdme .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hjFGdtANWZRNbdme .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hjFGdtANWZRNbdme .marker.cross{stroke:#333333;}#mermaid-svg-hjFGdtANWZRNbdme svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hjFGdtANWZRNbdme .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-hjFGdtANWZRNbdme .cluster-label text{fill:#333;}#mermaid-svg-hjFGdtANWZRNbdme .cluster-label span{color:#333;}#mermaid-svg-hjFGdtANWZRNbdme .label text,#mermaid-svg-hjFGdtANWZRNbdme span{fill:#333;color:#333;}#mermaid-svg-hjFGdtANWZRNbdme .node rect,#mermaid-svg-hjFGdtANWZRNbdme .node circle,#mermaid-svg-hjFGdtANWZRNbdme .node ellipse,#mermaid-svg-hjFGdtANWZRNbdme .node polygon,#mermaid-svg-hjFGdtANWZRNbdme .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hjFGdtANWZRNbdme .node .label{text-align:center;}#mermaid-svg-hjFGdtANWZRNbdme .node.clickable{cursor:pointer;}#mermaid-svg-hjFGdtANWZRNbdme .arrowheadPath{fill:#333333;}#mermaid-svg-hjFGdtANWZRNbdme .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-hjFGdtANWZRNbdme .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-hjFGdtANWZRNbdme .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-hjFGdtANWZRNbdme .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-hjFGdtANWZRNbdme .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hjFGdtANWZRNbdme .cluster text{fill:#333;}#mermaid-svg-hjFGdtANWZRNbdme .cluster span{color:#333;}#mermaid-svg-hjFGdtANWZRNbdme div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-hjFGdtANWZRNbdme :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 2. 缩短就可能会展开 inline int add(int x, int y)
{return x y;
}
inline int func()
{int x1 0;int x2 0;int x3 0;int x4 0;int ret 0;ret x1;return ret;
}
int main()
{int a 1, b 2;//int ret add(1, 2);int ret add(a | b , a b);//这样写也不会像宏函数一样出错了printf(%d\n, ret);ret func();return 0;
}#mermaid-svg-ChgeIIdHxGt0YRKw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ChgeIIdHxGt0YRKw .error-icon{fill:#552222;}#mermaid-svg-ChgeIIdHxGt0YRKw .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ChgeIIdHxGt0YRKw .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-ChgeIIdHxGt0YRKw .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ChgeIIdHxGt0YRKw .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ChgeIIdHxGt0YRKw .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ChgeIIdHxGt0YRKw .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ChgeIIdHxGt0YRKw .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ChgeIIdHxGt0YRKw .marker.cross{stroke:#333333;}#mermaid-svg-ChgeIIdHxGt0YRKw svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ChgeIIdHxGt0YRKw .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ChgeIIdHxGt0YRKw .cluster-label text{fill:#333;}#mermaid-svg-ChgeIIdHxGt0YRKw .cluster-label span{color:#333;}#mermaid-svg-ChgeIIdHxGt0YRKw .label text,#mermaid-svg-ChgeIIdHxGt0YRKw span{fill:#333;color:#333;}#mermaid-svg-ChgeIIdHxGt0YRKw .node rect,#mermaid-svg-ChgeIIdHxGt0YRKw .node circle,#mermaid-svg-ChgeIIdHxGt0YRKw .node ellipse,#mermaid-svg-ChgeIIdHxGt0YRKw .node polygon,#mermaid-svg-ChgeIIdHxGt0YRKw .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ChgeIIdHxGt0YRKw .node .label{text-align:center;}#mermaid-svg-ChgeIIdHxGt0YRKw .node.clickable{cursor:pointer;}#mermaid-svg-ChgeIIdHxGt0YRKw .arrowheadPath{fill:#333333;}#mermaid-svg-ChgeIIdHxGt0YRKw .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ChgeIIdHxGt0YRKw .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ChgeIIdHxGt0YRKw .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-ChgeIIdHxGt0YRKw .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-ChgeIIdHxGt0YRKw .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ChgeIIdHxGt0YRKw .cluster text{fill:#333;}#mermaid-svg-ChgeIIdHxGt0YRKw .cluster span{color:#333;}#mermaid-svg-ChgeIIdHxGt0YRKw div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ChgeIIdHxGt0YRKw :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 特性3: inline不建议声明和定义分离分离会导致链接错误。因为inline被展开就没有函数地址了链接就会找不到 #mermaid-svg-B16yLVa4NUmMKvhr {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-B16yLVa4NUmMKvhr .error-icon{fill:#552222;}#mermaid-svg-B16yLVa4NUmMKvhr .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-B16yLVa4NUmMKvhr .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-B16yLVa4NUmMKvhr .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-B16yLVa4NUmMKvhr .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-B16yLVa4NUmMKvhr .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-B16yLVa4NUmMKvhr .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-B16yLVa4NUmMKvhr .marker{fill:#333333;stroke:#333333;}#mermaid-svg-B16yLVa4NUmMKvhr .marker.cross{stroke:#333333;}#mermaid-svg-B16yLVa4NUmMKvhr svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-B16yLVa4NUmMKvhr .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-B16yLVa4NUmMKvhr .cluster-label text{fill:#333;}#mermaid-svg-B16yLVa4NUmMKvhr .cluster-label span{color:#333;}#mermaid-svg-B16yLVa4NUmMKvhr .label text,#mermaid-svg-B16yLVa4NUmMKvhr span{fill:#333;color:#333;}#mermaid-svg-B16yLVa4NUmMKvhr .node rect,#mermaid-svg-B16yLVa4NUmMKvhr .node circle,#mermaid-svg-B16yLVa4NUmMKvhr .node ellipse,#mermaid-svg-B16yLVa4NUmMKvhr .node polygon,#mermaid-svg-B16yLVa4NUmMKvhr .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-B16yLVa4NUmMKvhr .node .label{text-align:center;}#mermaid-svg-B16yLVa4NUmMKvhr .node.clickable{cursor:pointer;}#mermaid-svg-B16yLVa4NUmMKvhr .arrowheadPath{fill:#333333;}#mermaid-svg-B16yLVa4NUmMKvhr .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-B16yLVa4NUmMKvhr .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-B16yLVa4NUmMKvhr .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-B16yLVa4NUmMKvhr .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-B16yLVa4NUmMKvhr .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-B16yLVa4NUmMKvhr .cluster text{fill:#333;}#mermaid-svg-B16yLVa4NUmMKvhr .cluster span{color:#333;}#mermaid-svg-B16yLVa4NUmMKvhr div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-B16yLVa4NUmMKvhr :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 1. 代码示例: //Func.h
#define _CRT_SECURE_NO_WARNINGS 1
#includeiostreamusing namespace std;inline void f(int i);//Func.cpp
#define _CRT_SECURE_NO_WARNINGS 1
#include Func.h
void f(int i)
{cout f(int i) i endl;
}//Test.cpp
#define _CRT_SECURE_NO_WARNINGS 1
#includeiostream
#includeFunc.h
using namespace std;
int main()
{f(1);//只有声明需要地址但内联不会进入符号表return 0;
}Test.cpp调用f(1)函数f()只有声明没有定义调用实际链接的时候编译语法都过了允许在链接的时候再去找地址定义可能在其他地方就去其他地方找地址(用函数名修饰规则去找)找不到就会出现链接错误 #mermaid-svg-yq6HUDeMJDkkGufA {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-yq6HUDeMJDkkGufA .error-icon{fill:#552222;}#mermaid-svg-yq6HUDeMJDkkGufA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-yq6HUDeMJDkkGufA .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-yq6HUDeMJDkkGufA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-yq6HUDeMJDkkGufA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-yq6HUDeMJDkkGufA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-yq6HUDeMJDkkGufA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-yq6HUDeMJDkkGufA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-yq6HUDeMJDkkGufA .marker.cross{stroke:#333333;}#mermaid-svg-yq6HUDeMJDkkGufA svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-yq6HUDeMJDkkGufA .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-yq6HUDeMJDkkGufA .cluster-label text{fill:#333;}#mermaid-svg-yq6HUDeMJDkkGufA .cluster-label span{color:#333;}#mermaid-svg-yq6HUDeMJDkkGufA .label text,#mermaid-svg-yq6HUDeMJDkkGufA span{fill:#333;color:#333;}#mermaid-svg-yq6HUDeMJDkkGufA .node rect,#mermaid-svg-yq6HUDeMJDkkGufA .node circle,#mermaid-svg-yq6HUDeMJDkkGufA .node ellipse,#mermaid-svg-yq6HUDeMJDkkGufA .node polygon,#mermaid-svg-yq6HUDeMJDkkGufA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-yq6HUDeMJDkkGufA .node .label{text-align:center;}#mermaid-svg-yq6HUDeMJDkkGufA .node.clickable{cursor:pointer;}#mermaid-svg-yq6HUDeMJDkkGufA .arrowheadPath{fill:#333333;}#mermaid-svg-yq6HUDeMJDkkGufA .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-yq6HUDeMJDkkGufA .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-yq6HUDeMJDkkGufA .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-yq6HUDeMJDkkGufA .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-yq6HUDeMJDkkGufA .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-yq6HUDeMJDkkGufA .cluster text{fill:#333;}#mermaid-svg-yq6HUDeMJDkkGufA .cluster span{color:#333;}#mermaid-svg-yq6HUDeMJDkkGufA div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-yq6HUDeMJDkkGufA :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 效果演示: 当Func.h中inline void f(int i);变成void f(int i)就不会出现问题去掉内联 #mermaid-svg-L0tN3yKCQgVfXJOg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-L0tN3yKCQgVfXJOg .error-icon{fill:#552222;}#mermaid-svg-L0tN3yKCQgVfXJOg .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-L0tN3yKCQgVfXJOg .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-L0tN3yKCQgVfXJOg .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-L0tN3yKCQgVfXJOg .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-L0tN3yKCQgVfXJOg .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-L0tN3yKCQgVfXJOg .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-L0tN3yKCQgVfXJOg .marker{fill:#333333;stroke:#333333;}#mermaid-svg-L0tN3yKCQgVfXJOg .marker.cross{stroke:#333333;}#mermaid-svg-L0tN3yKCQgVfXJOg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-L0tN3yKCQgVfXJOg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-L0tN3yKCQgVfXJOg .cluster-label text{fill:#333;}#mermaid-svg-L0tN3yKCQgVfXJOg .cluster-label span{color:#333;}#mermaid-svg-L0tN3yKCQgVfXJOg .label text,#mermaid-svg-L0tN3yKCQgVfXJOg span{fill:#333;color:#333;}#mermaid-svg-L0tN3yKCQgVfXJOg .node rect,#mermaid-svg-L0tN3yKCQgVfXJOg .node circle,#mermaid-svg-L0tN3yKCQgVfXJOg .node ellipse,#mermaid-svg-L0tN3yKCQgVfXJOg .node polygon,#mermaid-svg-L0tN3yKCQgVfXJOg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-L0tN3yKCQgVfXJOg .node .label{text-align:center;}#mermaid-svg-L0tN3yKCQgVfXJOg .node.clickable{cursor:pointer;}#mermaid-svg-L0tN3yKCQgVfXJOg .arrowheadPath{fill:#333333;}#mermaid-svg-L0tN3yKCQgVfXJOg .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-L0tN3yKCQgVfXJOg .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-L0tN3yKCQgVfXJOg .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-L0tN3yKCQgVfXJOg .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-L0tN3yKCQgVfXJOg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-L0tN3yKCQgVfXJOg .cluster text{fill:#333;}#mermaid-svg-L0tN3yKCQgVfXJOg .cluster span{color:#333;}#mermaid-svg-L0tN3yKCQgVfXJOg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-L0tN3yKCQgVfXJOg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 2. 代码示例: //Func.h
#define _CRT_SECURE_NO_WARNINGS 1
#includeiostreamusing namespace std;inline void f(int i);void fx();//Func.cpp
#define _CRT_SECURE_NO_WARNINGS 1
#include Func.h
void f(int i)
{cout f(int i) i endl;
}
void fx()
{f(1);//既有声明也有定义这里直接展开不需要地址
}//Test.cpp
#define _CRT_SECURE_NO_WARNINGS 1
#includeiostream
#includeFunc.h
using namespace std;
int main()
{f(1);fx();return 0;
}#mermaid-svg-IJ6DXs9iKItIgIsU {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-IJ6DXs9iKItIgIsU .error-icon{fill:#552222;}#mermaid-svg-IJ6DXs9iKItIgIsU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-IJ6DXs9iKItIgIsU .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-IJ6DXs9iKItIgIsU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-IJ6DXs9iKItIgIsU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-IJ6DXs9iKItIgIsU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-IJ6DXs9iKItIgIsU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-IJ6DXs9iKItIgIsU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-IJ6DXs9iKItIgIsU .marker.cross{stroke:#333333;}#mermaid-svg-IJ6DXs9iKItIgIsU svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-IJ6DXs9iKItIgIsU .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-IJ6DXs9iKItIgIsU .cluster-label text{fill:#333;}#mermaid-svg-IJ6DXs9iKItIgIsU .cluster-label span{color:#333;}#mermaid-svg-IJ6DXs9iKItIgIsU .label text,#mermaid-svg-IJ6DXs9iKItIgIsU span{fill:#333;color:#333;}#mermaid-svg-IJ6DXs9iKItIgIsU .node rect,#mermaid-svg-IJ6DXs9iKItIgIsU .node circle,#mermaid-svg-IJ6DXs9iKItIgIsU .node ellipse,#mermaid-svg-IJ6DXs9iKItIgIsU .node polygon,#mermaid-svg-IJ6DXs9iKItIgIsU .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-IJ6DXs9iKItIgIsU .node .label{text-align:center;}#mermaid-svg-IJ6DXs9iKItIgIsU .node.clickable{cursor:pointer;}#mermaid-svg-IJ6DXs9iKItIgIsU .arrowheadPath{fill:#333333;}#mermaid-svg-IJ6DXs9iKItIgIsU .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-IJ6DXs9iKItIgIsU .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-IJ6DXs9iKItIgIsU .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-IJ6DXs9iKItIgIsU .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-IJ6DXs9iKItIgIsU .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-IJ6DXs9iKItIgIsU .cluster text{fill:#333;}#mermaid-svg-IJ6DXs9iKItIgIsU .cluster span{color:#333;}#mermaid-svg-IJ6DXs9iKItIgIsU div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-IJ6DXs9iKItIgIsU :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 效果演示: f()这个函数肯定是在的不然fx()就不会调到它但是Test.cpp中的 f() 不可调用Func.cpp中的 f() 可以调用一般只有声明没有定义调不到但是在Func.cpp中定义了 f()也调不到原因就是f()函数定义成了内联在用的地方就展开了就不需要生成指令建立栈帧把地址放进符号表 #mermaid-svg-trlTcPyuAtqSBIIX {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-trlTcPyuAtqSBIIX .error-icon{fill:#552222;}#mermaid-svg-trlTcPyuAtqSBIIX .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-trlTcPyuAtqSBIIX .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-trlTcPyuAtqSBIIX .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-trlTcPyuAtqSBIIX .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-trlTcPyuAtqSBIIX .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-trlTcPyuAtqSBIIX .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-trlTcPyuAtqSBIIX .marker{fill:#333333;stroke:#333333;}#mermaid-svg-trlTcPyuAtqSBIIX .marker.cross{stroke:#333333;}#mermaid-svg-trlTcPyuAtqSBIIX svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-trlTcPyuAtqSBIIX .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-trlTcPyuAtqSBIIX .cluster-label text{fill:#333;}#mermaid-svg-trlTcPyuAtqSBIIX .cluster-label span{color:#333;}#mermaid-svg-trlTcPyuAtqSBIIX .label text,#mermaid-svg-trlTcPyuAtqSBIIX span{fill:#333;color:#333;}#mermaid-svg-trlTcPyuAtqSBIIX .node rect,#mermaid-svg-trlTcPyuAtqSBIIX .node circle,#mermaid-svg-trlTcPyuAtqSBIIX .node ellipse,#mermaid-svg-trlTcPyuAtqSBIIX .node polygon,#mermaid-svg-trlTcPyuAtqSBIIX .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-trlTcPyuAtqSBIIX .node .label{text-align:center;}#mermaid-svg-trlTcPyuAtqSBIIX .node.clickable{cursor:pointer;}#mermaid-svg-trlTcPyuAtqSBIIX .arrowheadPath{fill:#333333;}#mermaid-svg-trlTcPyuAtqSBIIX .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-trlTcPyuAtqSBIIX .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-trlTcPyuAtqSBIIX .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-trlTcPyuAtqSBIIX .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-trlTcPyuAtqSBIIX .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-trlTcPyuAtqSBIIX .cluster text{fill:#333;}#mermaid-svg-trlTcPyuAtqSBIIX .cluster span{color:#333;}#mermaid-svg-trlTcPyuAtqSBIIX div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-trlTcPyuAtqSBIIX :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 3. 正确代码示例: //Func.h
//声明和定义不分离
#define _CRT_SECURE_NO_WARNINGS 1
#includeiostreamusing namespace std;inline void f(int i);
{cout f(int i) i endl;
}//Test.cpp
#define _CRT_SECURE_NO_WARNINGS 1
#includeiostream
#includeFunc.h
using namespace std;
int main()
{f(1);return 0;
}二、auto关键字
2.1.类型别名思考
随着程序越来越复杂程序中用到的类型也越来越复杂经常体现在
类型难于拼写含义不明确导致容易出错
#includeiostream
#includevector
#includestring
using namespace std;
int TestAuto()
{return 10;
}
int main()
{std::vectorstd::stringv;//std::vectorstd::string::iterator it v.begin();《》auto it v.begin();auto it v.begin();cout typeid(it).name() endl;//auto e; 无法通过编译使用auto定义变量时必须对其进行初始化return 0;
}在编程时常常需要把表达式的值赋值给变量这就要求在声明变量的时候清楚地知道表达式的类型。然而有时候要做到这点并非那么容易因此C11给auto赋予了新的含义
2.2.auto简介
在早期C/C中auto的含义是使用auto修饰的变量是具有自动存储器的局部变量但遗憾的是一直没有人去使用它大家可思考下为什么 C11中标准委员会赋予了auto全新的含义即auto不再是一个存储类型指示符而是作为一个新的类型指示符来指示编译器auto声明的变量必须由编译器在编译时期推导而得根据右边的值自动推导左边的类型
int TestAuto()
{return 10;
}
int main()
{int a 10;auto b a;auto c a;auto d TestAuto();cout typeid(b).name() endl;cout typeid(c).name() endl;cout typeid(d).name() endl;//auto e; 无法通过编译使用auto定义变量时必须对其进行初始化return 0;
}#mermaid-svg-LfVpVferqzuYooqo {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-LfVpVferqzuYooqo .error-icon{fill:#552222;}#mermaid-svg-LfVpVferqzuYooqo .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-LfVpVferqzuYooqo .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-LfVpVferqzuYooqo .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-LfVpVferqzuYooqo .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-LfVpVferqzuYooqo .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-LfVpVferqzuYooqo .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-LfVpVferqzuYooqo .marker{fill:#333333;stroke:#333333;}#mermaid-svg-LfVpVferqzuYooqo .marker.cross{stroke:#333333;}#mermaid-svg-LfVpVferqzuYooqo svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-LfVpVferqzuYooqo .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-LfVpVferqzuYooqo .cluster-label text{fill:#333;}#mermaid-svg-LfVpVferqzuYooqo .cluster-label span{color:#333;}#mermaid-svg-LfVpVferqzuYooqo .label text,#mermaid-svg-LfVpVferqzuYooqo span{fill:#333;color:#333;}#mermaid-svg-LfVpVferqzuYooqo .node rect,#mermaid-svg-LfVpVferqzuYooqo .node circle,#mermaid-svg-LfVpVferqzuYooqo .node ellipse,#mermaid-svg-LfVpVferqzuYooqo .node polygon,#mermaid-svg-LfVpVferqzuYooqo .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-LfVpVferqzuYooqo .node .label{text-align:center;}#mermaid-svg-LfVpVferqzuYooqo .node.clickable{cursor:pointer;}#mermaid-svg-LfVpVferqzuYooqo .arrowheadPath{fill:#333333;}#mermaid-svg-LfVpVferqzuYooqo .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-LfVpVferqzuYooqo .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-LfVpVferqzuYooqo .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-LfVpVferqzuYooqo .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-LfVpVferqzuYooqo .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-LfVpVferqzuYooqo .cluster text{fill:#333;}#mermaid-svg-LfVpVferqzuYooqo .cluster span{color:#333;}#mermaid-svg-LfVpVferqzuYooqo div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-LfVpVferqzuYooqo :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 效果演示: 使用auto定义变量时必须对其进行初始化在编译阶段编译器需要根据初始化表达式来推导auto的实际类型。因此auto并非是一种“类型”的声明而是一个类型声明时的“占位符”编译器在编译期会将auto替换为变量实际的类型。
2.3.auto的使用细节 #mermaid-svg-QEQKuB2g5T8BBynq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QEQKuB2g5T8BBynq .error-icon{fill:#552222;}#mermaid-svg-QEQKuB2g5T8BBynq .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QEQKuB2g5T8BBynq .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-QEQKuB2g5T8BBynq .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QEQKuB2g5T8BBynq .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QEQKuB2g5T8BBynq .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QEQKuB2g5T8BBynq .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QEQKuB2g5T8BBynq .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QEQKuB2g5T8BBynq .marker.cross{stroke:#333333;}#mermaid-svg-QEQKuB2g5T8BBynq svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QEQKuB2g5T8BBynq .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-QEQKuB2g5T8BBynq .cluster-label text{fill:#333;}#mermaid-svg-QEQKuB2g5T8BBynq .cluster-label span{color:#333;}#mermaid-svg-QEQKuB2g5T8BBynq .label text,#mermaid-svg-QEQKuB2g5T8BBynq span{fill:#333;color:#333;}#mermaid-svg-QEQKuB2g5T8BBynq .node rect,#mermaid-svg-QEQKuB2g5T8BBynq .node circle,#mermaid-svg-QEQKuB2g5T8BBynq .node ellipse,#mermaid-svg-QEQKuB2g5T8BBynq .node polygon,#mermaid-svg-QEQKuB2g5T8BBynq .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-QEQKuB2g5T8BBynq .node .label{text-align:center;}#mermaid-svg-QEQKuB2g5T8BBynq .node.clickable{cursor:pointer;}#mermaid-svg-QEQKuB2g5T8BBynq .arrowheadPath{fill:#333333;}#mermaid-svg-QEQKuB2g5T8BBynq .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-QEQKuB2g5T8BBynq .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-QEQKuB2g5T8BBynq .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-QEQKuB2g5T8BBynq .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-QEQKuB2g5T8BBynq .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-QEQKuB2g5T8BBynq .cluster text{fill:#333;}#mermaid-svg-QEQKuB2g5T8BBynq .cluster span{color:#333;}#mermaid-svg-QEQKuB2g5T8BBynq div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-QEQKuB2g5T8BBynq :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 1. auto与指针和引用结合起来使用 int main()
{int x 10;auto a x;auto* b x;auto c x;cout typeid(a).name() endl;cout typeid(b).name() endl;cout typeid(c).name() endl;return 0;
}#mermaid-svg-Fk8PV0FhdfhgmR56 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Fk8PV0FhdfhgmR56 .error-icon{fill:#552222;}#mermaid-svg-Fk8PV0FhdfhgmR56 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Fk8PV0FhdfhgmR56 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-Fk8PV0FhdfhgmR56 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Fk8PV0FhdfhgmR56 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Fk8PV0FhdfhgmR56 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Fk8PV0FhdfhgmR56 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Fk8PV0FhdfhgmR56 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Fk8PV0FhdfhgmR56 .marker.cross{stroke:#333333;}#mermaid-svg-Fk8PV0FhdfhgmR56 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Fk8PV0FhdfhgmR56 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Fk8PV0FhdfhgmR56 .cluster-label text{fill:#333;}#mermaid-svg-Fk8PV0FhdfhgmR56 .cluster-label span{color:#333;}#mermaid-svg-Fk8PV0FhdfhgmR56 .label text,#mermaid-svg-Fk8PV0FhdfhgmR56 span{fill:#333;color:#333;}#mermaid-svg-Fk8PV0FhdfhgmR56 .node rect,#mermaid-svg-Fk8PV0FhdfhgmR56 .node circle,#mermaid-svg-Fk8PV0FhdfhgmR56 .node ellipse,#mermaid-svg-Fk8PV0FhdfhgmR56 .node polygon,#mermaid-svg-Fk8PV0FhdfhgmR56 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Fk8PV0FhdfhgmR56 .node .label{text-align:center;}#mermaid-svg-Fk8PV0FhdfhgmR56 .node.clickable{cursor:pointer;}#mermaid-svg-Fk8PV0FhdfhgmR56 .arrowheadPath{fill:#333333;}#mermaid-svg-Fk8PV0FhdfhgmR56 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Fk8PV0FhdfhgmR56 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Fk8PV0FhdfhgmR56 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-Fk8PV0FhdfhgmR56 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-Fk8PV0FhdfhgmR56 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Fk8PV0FhdfhgmR56 .cluster text{fill:#333;}#mermaid-svg-Fk8PV0FhdfhgmR56 .cluster span{color:#333;}#mermaid-svg-Fk8PV0FhdfhgmR56 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Fk8PV0FhdfhgmR56 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 效果演示: #mermaid-svg-Kq1h6g5YdRGHkaOm {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Kq1h6g5YdRGHkaOm .error-icon{fill:#552222;}#mermaid-svg-Kq1h6g5YdRGHkaOm .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Kq1h6g5YdRGHkaOm .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-Kq1h6g5YdRGHkaOm .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Kq1h6g5YdRGHkaOm .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Kq1h6g5YdRGHkaOm .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Kq1h6g5YdRGHkaOm .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Kq1h6g5YdRGHkaOm .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Kq1h6g5YdRGHkaOm .marker.cross{stroke:#333333;}#mermaid-svg-Kq1h6g5YdRGHkaOm svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Kq1h6g5YdRGHkaOm .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Kq1h6g5YdRGHkaOm .cluster-label text{fill:#333;}#mermaid-svg-Kq1h6g5YdRGHkaOm .cluster-label span{color:#333;}#mermaid-svg-Kq1h6g5YdRGHkaOm .label text,#mermaid-svg-Kq1h6g5YdRGHkaOm span{fill:#333;color:#333;}#mermaid-svg-Kq1h6g5YdRGHkaOm .node rect,#mermaid-svg-Kq1h6g5YdRGHkaOm .node circle,#mermaid-svg-Kq1h6g5YdRGHkaOm .node ellipse,#mermaid-svg-Kq1h6g5YdRGHkaOm .node polygon,#mermaid-svg-Kq1h6g5YdRGHkaOm .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Kq1h6g5YdRGHkaOm .node .label{text-align:center;}#mermaid-svg-Kq1h6g5YdRGHkaOm .node.clickable{cursor:pointer;}#mermaid-svg-Kq1h6g5YdRGHkaOm .arrowheadPath{fill:#333333;}#mermaid-svg-Kq1h6g5YdRGHkaOm .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Kq1h6g5YdRGHkaOm .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Kq1h6g5YdRGHkaOm .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-Kq1h6g5YdRGHkaOm .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-Kq1h6g5YdRGHkaOm .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Kq1h6g5YdRGHkaOm .cluster text{fill:#333;}#mermaid-svg-Kq1h6g5YdRGHkaOm .cluster span{color:#333;}#mermaid-svg-Kq1h6g5YdRGHkaOm div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Kq1h6g5YdRGHkaOm :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 2. 在同一行定义多个变量 void TestAuto()
{auto a 1, b 2; auto c 3, d 4.0; // 该行代码会编译失败因为c和d的初始化表达式类型不同
}2.4.auto不能推导的场景 #mermaid-svg-rv10iWWXe3a8CR4K {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-rv10iWWXe3a8CR4K .error-icon{fill:#552222;}#mermaid-svg-rv10iWWXe3a8CR4K .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rv10iWWXe3a8CR4K .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-rv10iWWXe3a8CR4K .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rv10iWWXe3a8CR4K .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rv10iWWXe3a8CR4K .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rv10iWWXe3a8CR4K .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rv10iWWXe3a8CR4K .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rv10iWWXe3a8CR4K .marker.cross{stroke:#333333;}#mermaid-svg-rv10iWWXe3a8CR4K svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rv10iWWXe3a8CR4K .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-rv10iWWXe3a8CR4K .cluster-label text{fill:#333;}#mermaid-svg-rv10iWWXe3a8CR4K .cluster-label span{color:#333;}#mermaid-svg-rv10iWWXe3a8CR4K .label text,#mermaid-svg-rv10iWWXe3a8CR4K span{fill:#333;color:#333;}#mermaid-svg-rv10iWWXe3a8CR4K .node rect,#mermaid-svg-rv10iWWXe3a8CR4K .node circle,#mermaid-svg-rv10iWWXe3a8CR4K .node ellipse,#mermaid-svg-rv10iWWXe3a8CR4K .node polygon,#mermaid-svg-rv10iWWXe3a8CR4K .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-rv10iWWXe3a8CR4K .node .label{text-align:center;}#mermaid-svg-rv10iWWXe3a8CR4K .node.clickable{cursor:pointer;}#mermaid-svg-rv10iWWXe3a8CR4K .arrowheadPath{fill:#333333;}#mermaid-svg-rv10iWWXe3a8CR4K .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-rv10iWWXe3a8CR4K .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-rv10iWWXe3a8CR4K .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-rv10iWWXe3a8CR4K .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-rv10iWWXe3a8CR4K .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-rv10iWWXe3a8CR4K .cluster text{fill:#333;}#mermaid-svg-rv10iWWXe3a8CR4K .cluster span{color:#333;}#mermaid-svg-rv10iWWXe3a8CR4K div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-rv10iWWXe3a8CR4K :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 1. auto不能作为函数的参数 auto不能作为函数的参数
// 此处代码编译失败auto不能作为形参类型因为编译器无法对a的实际类型进行推导
void TestAuto(auto a)
{}#mermaid-svg-HfdGBkribnd4RVaN {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-HfdGBkribnd4RVaN .error-icon{fill:#552222;}#mermaid-svg-HfdGBkribnd4RVaN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-HfdGBkribnd4RVaN .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-HfdGBkribnd4RVaN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-HfdGBkribnd4RVaN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-HfdGBkribnd4RVaN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-HfdGBkribnd4RVaN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-HfdGBkribnd4RVaN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-HfdGBkribnd4RVaN .marker.cross{stroke:#333333;}#mermaid-svg-HfdGBkribnd4RVaN svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-HfdGBkribnd4RVaN .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-HfdGBkribnd4RVaN .cluster-label text{fill:#333;}#mermaid-svg-HfdGBkribnd4RVaN .cluster-label span{color:#333;}#mermaid-svg-HfdGBkribnd4RVaN .label text,#mermaid-svg-HfdGBkribnd4RVaN span{fill:#333;color:#333;}#mermaid-svg-HfdGBkribnd4RVaN .node rect,#mermaid-svg-HfdGBkribnd4RVaN .node circle,#mermaid-svg-HfdGBkribnd4RVaN .node ellipse,#mermaid-svg-HfdGBkribnd4RVaN .node polygon,#mermaid-svg-HfdGBkribnd4RVaN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-HfdGBkribnd4RVaN .node .label{text-align:center;}#mermaid-svg-HfdGBkribnd4RVaN .node.clickable{cursor:pointer;}#mermaid-svg-HfdGBkribnd4RVaN .arrowheadPath{fill:#333333;}#mermaid-svg-HfdGBkribnd4RVaN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-HfdGBkribnd4RVaN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-HfdGBkribnd4RVaN .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-HfdGBkribnd4RVaN .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-HfdGBkribnd4RVaN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-HfdGBkribnd4RVaN .cluster text{fill:#333;}#mermaid-svg-HfdGBkribnd4RVaN .cluster span{color:#333;}#mermaid-svg-HfdGBkribnd4RVaN div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-HfdGBkribnd4RVaN :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 2. auto不能直接用来声明数组 auto不能直接用来声明数组
void TestAuto()
{int a[] {1,2,3};auto b[] {456};
}为了避免与C98中的auto发生混淆C11只保留了auto作为类型指示符的用法auto在实际中最常见的优势用法就是跟以后会讲到的C11提供的新式for循环还有lambda表达式等进行配合使用。
2.5.小场景补充 TypeId 返回一个变量或数据类型的“类型”。 三、基于范围的for循环
3.1.范围for的语法
在C98中如果要遍历一个数组可以按照以下方式进行
#includeiostream
using namespace std;
void TestFor()
{int array[] { 1, 2, 3, 4, 5 };for (int i 0; i sizeof(array) / sizeof(array[0]); i)array[i] * 2;for (int* p array; p array sizeof(array) / sizeof(array[0]); p)cout *p ;
}
int main()
{TestFor();return 0;
}对于一个有范围的集合而言由程序员来说明循环的范围是多余的有时候还会容易犯错误。因此C11中引入了基于范围的for循环。for循环后的括号由冒号“ ”分为两部分第一部分是范围内用于迭代的变量第二部分则表示被迭代的范围
#includeiostream
using namespace std;
void TestFor()
{int array[] { 1, 2, 3, 4, 5 };for (int i 0; i sizeof(array) / sizeof(array[0]); i)array[i] * 2;for (int* p array; p array sizeof(array) / sizeof(array[0]); p)cout *p ;cout endl;for (auto n : array)//至于这里为什么采用引用//是因为不采用引用只是从array中取数赋值给nn*2发生变化对数组没影响所以要引用才能改变数组{n * 2;}for (auto m : array)//当然也不是必须写成auto m,可以int m ,double m,只是auto会根据右边值的类型推导出左边类型{cout m ;}cout endl;
}
int main()
{TestFor();return 0;
}#mermaid-svg-JIU8eP9vCFXdCRo2 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-JIU8eP9vCFXdCRo2 .error-icon{fill:#552222;}#mermaid-svg-JIU8eP9vCFXdCRo2 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-JIU8eP9vCFXdCRo2 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-JIU8eP9vCFXdCRo2 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-JIU8eP9vCFXdCRo2 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-JIU8eP9vCFXdCRo2 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-JIU8eP9vCFXdCRo2 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-JIU8eP9vCFXdCRo2 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-JIU8eP9vCFXdCRo2 .marker.cross{stroke:#333333;}#mermaid-svg-JIU8eP9vCFXdCRo2 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-JIU8eP9vCFXdCRo2 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-JIU8eP9vCFXdCRo2 .cluster-label text{fill:#333;}#mermaid-svg-JIU8eP9vCFXdCRo2 .cluster-label span{color:#333;}#mermaid-svg-JIU8eP9vCFXdCRo2 .label text,#mermaid-svg-JIU8eP9vCFXdCRo2 span{fill:#333;color:#333;}#mermaid-svg-JIU8eP9vCFXdCRo2 .node rect,#mermaid-svg-JIU8eP9vCFXdCRo2 .node circle,#mermaid-svg-JIU8eP9vCFXdCRo2 .node ellipse,#mermaid-svg-JIU8eP9vCFXdCRo2 .node polygon,#mermaid-svg-JIU8eP9vCFXdCRo2 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-JIU8eP9vCFXdCRo2 .node .label{text-align:center;}#mermaid-svg-JIU8eP9vCFXdCRo2 .node.clickable{cursor:pointer;}#mermaid-svg-JIU8eP9vCFXdCRo2 .arrowheadPath{fill:#333333;}#mermaid-svg-JIU8eP9vCFXdCRo2 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-JIU8eP9vCFXdCRo2 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-JIU8eP9vCFXdCRo2 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-JIU8eP9vCFXdCRo2 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-JIU8eP9vCFXdCRo2 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-JIU8eP9vCFXdCRo2 .cluster text{fill:#333;}#mermaid-svg-JIU8eP9vCFXdCRo2 .cluster span{color:#333;}#mermaid-svg-JIU8eP9vCFXdCRo2 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-JIU8eP9vCFXdCRo2 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 注意:与普通循环类似,可以用continue来结束本次循环,也可以用break来跳出整个循环 3.2.范围for的使用条件 #mermaid-svg-Fps7H9lZdBsXole1 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Fps7H9lZdBsXole1 .error-icon{fill:#552222;}#mermaid-svg-Fps7H9lZdBsXole1 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Fps7H9lZdBsXole1 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-Fps7H9lZdBsXole1 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Fps7H9lZdBsXole1 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Fps7H9lZdBsXole1 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Fps7H9lZdBsXole1 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Fps7H9lZdBsXole1 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Fps7H9lZdBsXole1 .marker.cross{stroke:#333333;}#mermaid-svg-Fps7H9lZdBsXole1 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Fps7H9lZdBsXole1 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Fps7H9lZdBsXole1 .cluster-label text{fill:#333;}#mermaid-svg-Fps7H9lZdBsXole1 .cluster-label span{color:#333;}#mermaid-svg-Fps7H9lZdBsXole1 .label text,#mermaid-svg-Fps7H9lZdBsXole1 span{fill:#333;color:#333;}#mermaid-svg-Fps7H9lZdBsXole1 .node rect,#mermaid-svg-Fps7H9lZdBsXole1 .node circle,#mermaid-svg-Fps7H9lZdBsXole1 .node ellipse,#mermaid-svg-Fps7H9lZdBsXole1 .node polygon,#mermaid-svg-Fps7H9lZdBsXole1 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Fps7H9lZdBsXole1 .node .label{text-align:center;}#mermaid-svg-Fps7H9lZdBsXole1 .node.clickable{cursor:pointer;}#mermaid-svg-Fps7H9lZdBsXole1 .arrowheadPath{fill:#333333;}#mermaid-svg-Fps7H9lZdBsXole1 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Fps7H9lZdBsXole1 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Fps7H9lZdBsXole1 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-Fps7H9lZdBsXole1 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-Fps7H9lZdBsXole1 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Fps7H9lZdBsXole1 .cluster text{fill:#333;}#mermaid-svg-Fps7H9lZdBsXole1 .cluster span{color:#333;}#mermaid-svg-Fps7H9lZdBsXole1 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Fps7H9lZdBsXole1 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} for循环迭代的范围必须是确定的 对于数组而言就是数组中第一个元素和最后一个元素的范围对于类而言应该提供 begin和end的方法begin和end就是for循环迭代的范围。 注意以下代码就有问题因为for的范围不确定
void TestFor(int array[])
{for(auto e : array)cout e endl;
}四、指针空值nullptr #mermaid-svg-sCnOYeKUojjadotZ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-sCnOYeKUojjadotZ .error-icon{fill:#552222;}#mermaid-svg-sCnOYeKUojjadotZ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-sCnOYeKUojjadotZ .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-sCnOYeKUojjadotZ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-sCnOYeKUojjadotZ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-sCnOYeKUojjadotZ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-sCnOYeKUojjadotZ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-sCnOYeKUojjadotZ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-sCnOYeKUojjadotZ .marker.cross{stroke:#333333;}#mermaid-svg-sCnOYeKUojjadotZ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-sCnOYeKUojjadotZ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-sCnOYeKUojjadotZ .cluster-label text{fill:#333;}#mermaid-svg-sCnOYeKUojjadotZ .cluster-label span{color:#333;}#mermaid-svg-sCnOYeKUojjadotZ .label text,#mermaid-svg-sCnOYeKUojjadotZ span{fill:#333;color:#333;}#mermaid-svg-sCnOYeKUojjadotZ .node rect,#mermaid-svg-sCnOYeKUojjadotZ .node circle,#mermaid-svg-sCnOYeKUojjadotZ .node ellipse,#mermaid-svg-sCnOYeKUojjadotZ .node polygon,#mermaid-svg-sCnOYeKUojjadotZ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-sCnOYeKUojjadotZ .node .label{text-align:center;}#mermaid-svg-sCnOYeKUojjadotZ .node.clickable{cursor:pointer;}#mermaid-svg-sCnOYeKUojjadotZ .arrowheadPath{fill:#333333;}#mermaid-svg-sCnOYeKUojjadotZ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-sCnOYeKUojjadotZ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-sCnOYeKUojjadotZ .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-sCnOYeKUojjadotZ .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-sCnOYeKUojjadotZ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-sCnOYeKUojjadotZ .cluster text{fill:#333;}#mermaid-svg-sCnOYeKUojjadotZ .cluster span{color:#333;}#mermaid-svg-sCnOYeKUojjadotZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-sCnOYeKUojjadotZ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} C98中的指针空值 在良好的C/C编程习惯中声明一个变量时最好给该变量一个合适的初始值否则可能会出现不可预料的错误比如未初始化的指针。如果一个指针没有合法的指向我们基本都是按照如下方式对其进行初始化
void TestPtr()
{
int* p1 NULL;
int* p2 0;
// ……
}NULL实际是一个宏在传统的C头文件(stddef.h)中可以看到如下代码
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif可以看到NULL可能被定义为字面常量0或者被定义为无类型指针(void*)的常量。不论采取何种定义在使用空值的指针时都不可避免的会遇到一些麻烦比如
#includeiostream
using namespace std;
void f(int)
{cout f(int) endl;
}
void f(int*)
{cout f(int*) endl;
}
int main()
{f(0);f(NULL);f((int*)NULL);return 0;
}程序本意是想通过f(NULL)调用指针版本的f(int*)函数但是由于NULL被定义成0因此与程序的初衷相悖。 在C98中字面常量0既可以是一个整形数字也可以是无类型的指针(void*)常量但是编译器默认情况下将其看成是一个整形常量如果要将其按照指针方式来使用必须对其进行强转(void *)0。 #mermaid-svg-uyONYCYEVUY3TW45 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-uyONYCYEVUY3TW45 .error-icon{fill:#552222;}#mermaid-svg-uyONYCYEVUY3TW45 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-uyONYCYEVUY3TW45 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-uyONYCYEVUY3TW45 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-uyONYCYEVUY3TW45 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-uyONYCYEVUY3TW45 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-uyONYCYEVUY3TW45 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-uyONYCYEVUY3TW45 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-uyONYCYEVUY3TW45 .marker.cross{stroke:#333333;}#mermaid-svg-uyONYCYEVUY3TW45 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-uyONYCYEVUY3TW45 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-uyONYCYEVUY3TW45 .cluster-label text{fill:#333;}#mermaid-svg-uyONYCYEVUY3TW45 .cluster-label span{color:#333;}#mermaid-svg-uyONYCYEVUY3TW45 .label text,#mermaid-svg-uyONYCYEVUY3TW45 span{fill:#333;color:#333;}#mermaid-svg-uyONYCYEVUY3TW45 .node rect,#mermaid-svg-uyONYCYEVUY3TW45 .node circle,#mermaid-svg-uyONYCYEVUY3TW45 .node ellipse,#mermaid-svg-uyONYCYEVUY3TW45 .node polygon,#mermaid-svg-uyONYCYEVUY3TW45 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-uyONYCYEVUY3TW45 .node .label{text-align:center;}#mermaid-svg-uyONYCYEVUY3TW45 .node.clickable{cursor:pointer;}#mermaid-svg-uyONYCYEVUY3TW45 .arrowheadPath{fill:#333333;}#mermaid-svg-uyONYCYEVUY3TW45 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-uyONYCYEVUY3TW45 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-uyONYCYEVUY3TW45 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-uyONYCYEVUY3TW45 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-uyONYCYEVUY3TW45 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-uyONYCYEVUY3TW45 .cluster text{fill:#333;}#mermaid-svg-uyONYCYEVUY3TW45 .cluster span{color:#333;}#mermaid-svg-uyONYCYEVUY3TW45 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-uyONYCYEVUY3TW45 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 注意: 在使用nullptr表示指针空值时不需要包含头文件因为nullptr是C11作为新关键字引入的。 在C11中sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同。 为了提高代码的健壮性在后续表示指针空值时建议最好使用nullptr