当前位置: 首页 > wzjs >正文

eclipse jsp 网站开发六安网络上

eclipse jsp 网站开发,六安网络上,石家庄网站建设燕杰,中国企业信用网站官网Hello~,欢迎大家来到我的博客进行学习! 目录 inline为什么不能加分号?为什么要加外面的括号?为什么要加里面的括号? inline 用inline修饰的函数叫做内联函数,编译时C编译器会在调用的地方展开内联函数,这样调用内联函数就不需要建立栈帧…

在这里插入图片描述

Hello~,欢迎大家来到我的博客进行学习!

目录

  • inline
    • 为什么不能加分号?
    • 为什么要加外面的括号?
    • 为什么要加里面的括号?

inline

  • 用inline修饰的函数叫做内联函数,编译时C++编译器会在调用的地方展开内联函数,这样调用内联函数就不需要建立栈帧了,就可以提高效率。
  • inline对于编译器而言只是⼀个建议,也就是说,你加了inline编译器也可以选择在调用的地方不展开,不同编译器关于inline什么情况展开各不相同,因为C++标准没有规定这个。inline适用于频繁调用的短小函数,对于递归函数,代码相对多⼀些的函数,加上inline也会被编译器忽略。
  • C语言实现宏函数也会在预处理时替换展开,但是宏函数实现很复杂很容易出错的,且不方便调试,C++设计了inline目的就是替代C的宏函数。
  • vs编译器 debug版本下面默认是不展开inline的,这样方便调试,debug版本想展开需要设置⼀下以下两个地方。
  • inline不建议声明和定义分离到两个文件,分离会导致链接错误。因为inline被展开,就没有函数地址,链接时会出现报错。

C++弄内联函数是为了替代宏,我们在写宏的时候非常容易写错,所以C++中不太推荐宏这个东西。例如:

// 实现⼀个ADD宏函数的常⻅问题
//#define ADD(int a, int b) return a + b;
//#define ADD(a, b) a + b;
//#define ADD(a, b) (a + b)// 正确的宏实现
#define ADD(a, b) ((a) + (b))

这里有3个问题:

  • 为什么不能加分号?
  • 为什么要加外面的括号?
  • 为什么要加里面的括号?

为什么不能加分号?

首先在这个情况下,是可以加分号的:

#include<iostream>
using namespace std;
#define ADD(a,b)((a)+(b));int main()
{int ret = ADD(1, 2);return 0;
}

但是这个场景中,就不可以:

#include<iostream>
using namespace std;
#define ADD(a,b)((a)+(b));int main()
{int ret = ADD(1, 2);cout << ADD(1, 2) << endl;return 0;
}

这里我们加了分号以后,宏替换以后就会有两个分号,就会被识别为两个语句,一个分号代表一个语句,被替换后的形式为这样:

#include<iostream>
using namespace std;
#define ADD(a,b)((a)+(b));int main()
{int ret = ADD(1, 2);//int ret =((1)+(2));cout <<((1)+(2)); << endl;return 0;
}

所以不能加分号。

为什么要加外面的括号?

#include<iostream>
using namespace std;
#define ADD(a,b)(a)+(b)int main()
{int ret = ADD(1, 2);cout << ADD(1, 2) * 5 << endl;return 0;
}

这里就是运算符优先级的问题,如果不加就是11。

为什么要加里面的括号?

#include<iostream>
using namespace std;
#define ADD(a,b)(a+b)
int main()
{int ret = ADD(1, 2);int x = 1, y = 2;ADD(x & y, x | y); // -> (x&y+x|y)return 0;
}

这里也是运算符优先级的问题,这里是一种替换,传给a的不一定是变量表达式,也可能是运算表达式。这里我们本来希望&和|先运算,但是+的优先级高。

在这里我们体会到了,宏会出现各种问题所以C++推荐内联。宏的好处是快一些,因为它的本质是替换,假设我们写一个add函数,要调用是要建立栈帧的。用内联函数就不需要建立栈帧了,可以提高效率,使用内联可以避开宏的坑。

#include<iostream>
using namespace std;
inline int ADD(int x, int y)
{int ret = x + y;return ret;
}int main()
{int ret = ADD(1, 2);cout << ADD(1, 2) << endl;cout << ADD(1, 2) * 5 << endl;int x = 1, y = 2;ADD(x & y, x | y); // -> (x&y+x|y)return 0;
}

inline对于编译器而言只是⼀个建议,我们并不会用内联去写递归或一些比较长的代码,我们只会用它去写一些比较短的代码。函数被编译完之后,会变为一串指令,这里肯定会有很多很多的指令,这里和数组类似,是第一句指令的地址。

inline不建议声明和定义分离到两个文件,分离会导致链接错误。链接错误就是找不到定义就会出现。
F.h

#include <iostream>
using namespace std;
inline void f(int i);

F.cpp

#include "F.h"
void f(int i)
{cout << i << endl;
}

main.cpp

#include "F.h"
int main()
{// 链接错误:⽆法解析的外部符号 "void __cdecl f(int)" (?f@@YAXH@Z)f(1);return 0;
}

普通函数是不可以放到.h里面的,也会报链接错误。这里报错不是报错找不到,而是冲突。
F.h

#include <iostream>
using namespace std;
inline void f(int i);void Func()
{cout << "Func()" << endl;
}

加一个静态就可以解决:

#include <iostream>
using namespace std;
inline void f(int i);static void Func()
{cout << "Func()" << endl;
}

好了,我们的知识就讲到这里。如果文章内容有误,请大佬在评论区斧正!谢谢大家!
在这里插入图片描述


文章转载自:

http://hVIEyXSt.kfmnf.cn
http://gcVAu0ez.kfmnf.cn
http://RPU0TRMx.kfmnf.cn
http://FR3jNXCr.kfmnf.cn
http://EUTjW3vP.kfmnf.cn
http://VWse6jq4.kfmnf.cn
http://JX2G6zQM.kfmnf.cn
http://4qsAvdff.kfmnf.cn
http://HvcopRIf.kfmnf.cn
http://6rGzYZGq.kfmnf.cn
http://5Ki66Bmm.kfmnf.cn
http://NjwMo3tr.kfmnf.cn
http://OMVGbP05.kfmnf.cn
http://IzU3uGHB.kfmnf.cn
http://KTAS2IM7.kfmnf.cn
http://lJJ9RJzI.kfmnf.cn
http://pSBL12u9.kfmnf.cn
http://pejFKyqA.kfmnf.cn
http://LXfVgA4s.kfmnf.cn
http://5x4cHki0.kfmnf.cn
http://VHrkbDVo.kfmnf.cn
http://sFnpri5k.kfmnf.cn
http://nWj1Pjq2.kfmnf.cn
http://ALRki1Sx.kfmnf.cn
http://xeYGMIRI.kfmnf.cn
http://R3eHncnw.kfmnf.cn
http://3MdaJRn1.kfmnf.cn
http://befaVOBU.kfmnf.cn
http://NlhcLPH9.kfmnf.cn
http://oIqUYHPo.kfmnf.cn
http://www.dtcms.com/wzjs/655195.html

相关文章:

  • 个体工商户可以做网站吗网站后台删除二级栏目
  • 太原企业网站搭建新冠人数最新统计
  • 设计实例网站网站的建设公司简介
  • 做360网站官网还是百度知道近年网络营销成功案例
  • 科技 响应式网站模板南宁手机模板建站
  • 河南怎么样做网站制作网页时用的最多的是
  • 广州建站快车跨境电商个人可以开店吗
  • 国际网站怎么样做购物网站建设方案ppt
  • 最贵网站建设网站开发者模式下载视频教程
  • 大学网站html模板下载网站设计步骤ppt
  • 婚庆影楼型网站开发做网站需要数据库吗
  • 华为网站建设策划书怎样建设影视网站
  • 建设网站资料在哪收集找产品厂家用哪个app
  • 购物网站建设模板图片羽毛球赛事重播
  • 厦门做网站优化哪家好如何做网站的内容
  • 数字营销 h5 网站开发安康做网站哪家好
  • 解除网站开发合同 首付款是否退云服务器怎么建设网站
  • 上海网站建设推广服务教育类网站如何做
  • 网站空间域名续费如何使用seo进行综合查询
  • 四川和城乡建设厅网站一级a做爰片免费网站孕交视频
  • 人才网站查询档案wordpress英文主题适合小白用吗
  • 洛阳网站建设价格低做淘宝素材网站哪个好用
  • 网站禁止访问DW怎么做招聘网站
  • 网站流量消耗计算网站开发亿玛酷信赖
  • 莆田网站建设平台项目计划书如何写
  • 想要做网站的企业市政道路毕业设计代做网站
  • 早厦门构网站建设凡科快图app怎么下载
  • 沙田网站建设wordpress弹窗
  • 怎么把dw做的网站分享给别网站 建设 内容
  • 静宁网站建设可口可乐软文范例