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

好玩的电脑网页游戏苏州seo怎么做

好玩的电脑网页游戏,苏州seo怎么做,wordpress获取作者,wordpress dz 整合目录 一、C语言版本 二、C的实现方法 2.1数据包 2.2sizeof...运算符 2.3可变参数模板的使用 2.4emplace_back() 有时候我们在编写函数时#xff0c;可能不知道要传入的参数个数#xff0c;类型 。比如我们要实现一个叠加函数#xff0c;再比如c语言中的printf,c中的emp…         目录 一、C语言版本 二、C的实现方法 2.1数据包 2.2sizeof...运算符 2.3可变参数模板的使用 2.4emplace_back() 有时候我们在编写函数时可能不知道要传入的参数个数类型 。比如我们要实现一个叠加函数再比如c语言中的printf,c中的emplace_last()。 那么这些函数是如何实现的呢 一、C语言版本 在 C 中可变参数通过 stdarg.h 头文件中的宏来处理。最常用的宏是 va_list、va_start、va_arg 和 va_end。以下是这些宏的简要说明 va_list用于声明一个可变参数列表的类型。 其实va_list就是一个char*类型但具体实现取决于编译器和平台。它的内部结构是由编译器实现的对于程序员来说是不透明的。 va_start用于初始化一个可变参数列表将其与函数参数列表中的最后一个固定参数关联。因为形参是从右往左入参的也就是右边的参数是高地址左边的函数是低地址 va_arg用于从可变参数列表中读取一个参数并指定其类型。 va_end用于清理可变参数列表结束可变参数的使用  下面我们将结合一段代码来简单的讲解 #includeiostream #includestdarg.h int addsum(int num, ...) {va_list args;va_start(args, num);int ret0;for (int i 0; i num; i){int temp va_arg(args, int);rettemp;}va_end(args);return ret; }int main() {std::coutaddsum(5, 1, 2, 3, 4, 5);return 0; } 在 C 语言中如果你使用了 va_start 宏来初始化可变参数列表那么你至少需要传递一个参数作为固定参数以便确定可变参数列表的起始位置。这个固定参数通常被称为 sentinel 或 sentinel value。 那么这个sentinel 或 sentinel value。一定要是参数个数吗 当然不是从printf中我们就知道第一个参数也可以是字符串。 在实现可变参数函数时并不一定需要传递一个表示参数个数的额外参数。额外的参数可以帮助函数确定参数的数量但并不是必须的。实际上很多情况下都可以通过其他方式来确定参数的数量。 以下是一些确定参数数量的方法 约定特定的参数结尾标志例如C 标准库中的 printf 函数就是通过字符串中的格式化标志例如 %d、%s 等来确定参数的数量的。 利用特定的参数类型例如如果所有的参数都是相同类型的你可以在函数中使用特定的参数类型来确定参数的数量。 使用额外参数传递参数数量虽然不是必须的但在某些情况下通过额外的参数传递参数的数量是一种方便的做法。 在实际应用中选择哪种方法取决于函数的使用场景和需求。如果函数的参数数量不固定并且无法通过其他方式确定参数的数量那么传递一个表示参数数量的额外参数是一种常见的做法。但在某些情况下其他方法可能更加合适。 总的来说并不是一定要传递表示参数个数的额外参数具体是否需要取决于函数的设计和实现需求。 而va_start其实就是将自己定义的va_list 类型的参数向后移动一个位置 在上面的代码中其实就是让args指向如图所示位置。 而va_arg就是将后面的参数从其相应的类型提取出来。这下你就知道为什么printf中为什么要有传入%d%f这些东西了吧。当然这些东西也有确定参数个数的作用。 最后只剩下va_end用于标记可变参数列表的结束。它的存在是为了确保在使用完可变参数列表后正确释放资源以避免内存泄漏和其他潜在的问题。 在可变参数函数中通常会使用 va_start 来初始化 va_list 对象然后使用 va_arg 来逐个读取参数直到参数列表的末尾。一旦处理完所有参数就应该调用 va_end 来清理 va_list 对象以释放相关资源。 va_end 的作用包括 清理资源va_list 对象可能会占用一些资源例如在某些实现中可能分配了内存。调用 va_end 可以释放这些资源避免内存泄漏。 标记列表的结束调用 va_end 可以显式地标记可变参数列表的结束使得程序能够正确地识别参数列表的边界避免访问超出列表范围的参数。 与平台相关的清理工作va_end 可能会执行与平台相关的清理工作以确保系统资源得到正确的释放。 在使用可变参数函数时特别是在处理可变参数列表的末尾时始终记得调用 va_end 是很重要的。不调用 va_end 可能会导致资源泄漏和未定义的行为因此要确保在使用完可变参数列表后及时调用 va_end。 二、C的实现方法 2.1数据包 在 C 中也可以使用可变参数模板来实现类似的功能这种技术更加灵活并且不需要使用宏。C11 引入了新的语法和标准库支持使得可变参数模板更加易用和安全。 c在c11中提出了可变参数模板的概念所谓可变参数模板就是一个接受可变数目参数模板的函数或模板类。可变数目的参数被称作参数包。存在两种参数包 1.模板参数包表示0或多个模板参数 2.函数参数包表示0或多个函数参数 我们使用“...”来表示一个包在一个模板参数列表中class..或typname...表示接下来 的参数表示零个或多个类型的列表一个类型名后面跟一个省略号表示零个或多个给定类型的非类型参数的列表。在函数参数列表中如果一个参数的类型是一个模板参数包则此参数也是一个函数参数包。例如 //Args是一个模板参数包rest是一个函数参数包 //Args表示零个或多个模板类型参数//rest表示零个或多个函数参数 template typename T,typename...Args void foo(const T 6t,const Args6 .. rest); 声明了foo是一个可变参数函数模板它有一个名为T的类型参数和一个名为Args的模板参数包。这个包表示零个或多个额外的类型参数。foo的函数参数列表包含一个const s类型的参数指向T的类型还包含一个名为rest的函数参数包此包表示零个或多个函数参数。 与往常一样编译器从函数的实参推断模板参数类型。对于一个可变参数模板编译器还会推断包中参数的数目。例如给定下面的调用 int i 0; double d3.14; string show now brown cow; foo(i,s,42,d); //包中有三个参数 fog(s.42,hi);//包中有两个参数 foo(d,s); //包中有一个参数 foo(hi); //空包 编译器会为foo实例化出四个不同的版本: void foo(const int,const string,const int,const double); void foo(const string,const int,const char[3]); void foo(const double,const string); void foo(const char[3]); 在每个实例中T的类型都是从第一个实参的类型推断出来的。剩下的实参(如果有的话)提供函数额外实参的数目和类型。 2.2sizeof...运算符 当我们需要知道包中有多少元素时可以使用sizeof...运算符。类似sizeof返回一个常量表达式 templatetypename ...Args void g(Args .args) {cout sizeof...(Args)end1;//类型参数的数目cout sizeof...(args)endl;//函数参数的数目 } 2.3可变参数模板的使用 void _ShowList() {// 结束条件的函数std::cout std::endl; }template class T, class... Args void _ShowList(T val, Args... args) {std::cout val ;_ShowList(args...); }// args代表0-N的参数包 template class... Args void CppPrint(Args... args) {_ShowList(args...); } int main() {CppPrint(1, 2, 2.2, string(xxxx)); } 一般来说我们是使用递归的方式来将参数全部使用当函数全部使用后就会匹配到结束函数。 template class T void PrintArg(T t) {std::cout t ; } // args表示0-N的参数包 template class... Args void CppPrintf(Args... args) {int a[] {0, (PrintArg(args), 0)...};cout endl; } c在编译时要确定数组a的大小来给空间所以他会将里面的那个数据包展开如图中是一个逗号表达式也就是有几个参数就会调用几下PrintArg。 2.4emplace_back() emplace_back 是 C 中标准库容器 std::vector 的一个成员函数用于在容器的尾部直接构造一个新元素而不是先创建一个临时对象再拷贝或移动到容器中. 使用 emplace_back 可以直接在容器的尾部构造一个新元素而不需要手动创建该元素的实例。emplace_back 接受任意数量的参数这些参数会被传递给元素类型的构造函数用于直接在容器中构造新元素。 所以网上有人说emplace_back代价更小但是事实上移动拷贝代价更小所以这句话应该有前提就是当元素类型是不可拷贝的时候。 在元素类型允许移动构造或移动赋值的情况下emplace_back 和 push_back 的性能差异可能会减小甚至消失。 emplace_back 和 push_back 的主要性能差异在于 emplace_back 在容器中直接构造元素避免了创建临时对象和拷贝/移动操作。push_back 在容器中插入一个已经构造的元素的拷贝或移动。 但是如果元素类型具有移动语义即具有移动构造函数和/或移动赋值运算符那么在 push_back 中插入一个临时构造的元素并在插入过程中执行移动操作性能损失会相对较小。 因此在元素类型允许移动拷贝时emplace_back 和 push_back 的性能差异可能会减小甚至没有明显的性能差异。在这种情况下可以选择更符合语义的操作或更易读的代码。
文章转载自:
http://www.morning.bfgpn.cn.gov.cn.bfgpn.cn
http://www.morning.mpwgs.cn.gov.cn.mpwgs.cn
http://www.morning.mtbth.cn.gov.cn.mtbth.cn
http://www.morning.gsyns.cn.gov.cn.gsyns.cn
http://www.morning.rkdnm.cn.gov.cn.rkdnm.cn
http://www.morning.bfnbn.cn.gov.cn.bfnbn.cn
http://www.morning.kpwdt.cn.gov.cn.kpwdt.cn
http://www.morning.nkjjp.cn.gov.cn.nkjjp.cn
http://www.morning.mnsts.cn.gov.cn.mnsts.cn
http://www.morning.wjdgx.cn.gov.cn.wjdgx.cn
http://www.morning.mzydm.cn.gov.cn.mzydm.cn
http://www.morning.mmzfl.cn.gov.cn.mmzfl.cn
http://www.morning.dxzcr.cn.gov.cn.dxzcr.cn
http://www.morning.qdzqf.cn.gov.cn.qdzqf.cn
http://www.morning.symgk.cn.gov.cn.symgk.cn
http://www.morning.frpm.cn.gov.cn.frpm.cn
http://www.morning.mtxrq.cn.gov.cn.mtxrq.cn
http://www.morning.rmyt.cn.gov.cn.rmyt.cn
http://www.morning.kmbgl.cn.gov.cn.kmbgl.cn
http://www.morning.hlwzd.cn.gov.cn.hlwzd.cn
http://www.morning.zlnf.cn.gov.cn.zlnf.cn
http://www.morning.zztkt.cn.gov.cn.zztkt.cn
http://www.morning.gtwtk.cn.gov.cn.gtwtk.cn
http://www.morning.jnvivi.com.gov.cn.jnvivi.com
http://www.morning.wynnb.cn.gov.cn.wynnb.cn
http://www.morning.vuref.cn.gov.cn.vuref.cn
http://www.morning.dysgr.cn.gov.cn.dysgr.cn
http://www.morning.jytrb.cn.gov.cn.jytrb.cn
http://www.morning.qzpkr.cn.gov.cn.qzpkr.cn
http://www.morning.fjzlh.cn.gov.cn.fjzlh.cn
http://www.morning.nlqgb.cn.gov.cn.nlqgb.cn
http://www.morning.mcgsq.cn.gov.cn.mcgsq.cn
http://www.morning.rbmnq.cn.gov.cn.rbmnq.cn
http://www.morning.qcfcz.cn.gov.cn.qcfcz.cn
http://www.morning.xbdrc.cn.gov.cn.xbdrc.cn
http://www.morning.lpzyq.cn.gov.cn.lpzyq.cn
http://www.morning.zxhhy.cn.gov.cn.zxhhy.cn
http://www.morning.mzhgf.cn.gov.cn.mzhgf.cn
http://www.morning.cjsnj.cn.gov.cn.cjsnj.cn
http://www.morning.grjh.cn.gov.cn.grjh.cn
http://www.morning.xjnjb.cn.gov.cn.xjnjb.cn
http://www.morning.ktlfb.cn.gov.cn.ktlfb.cn
http://www.morning.nlryq.cn.gov.cn.nlryq.cn
http://www.morning.lqws.cn.gov.cn.lqws.cn
http://www.morning.mwmxs.cn.gov.cn.mwmxs.cn
http://www.morning.btns.cn.gov.cn.btns.cn
http://www.morning.ysfj.cn.gov.cn.ysfj.cn
http://www.morning.lgmgn.cn.gov.cn.lgmgn.cn
http://www.morning.jrlgz.cn.gov.cn.jrlgz.cn
http://www.morning.wkgyz.cn.gov.cn.wkgyz.cn
http://www.morning.yrmgh.cn.gov.cn.yrmgh.cn
http://www.morning.hjssh.cn.gov.cn.hjssh.cn
http://www.morning.cnlmp.cn.gov.cn.cnlmp.cn
http://www.morning.snlxb.cn.gov.cn.snlxb.cn
http://www.morning.xhddb.cn.gov.cn.xhddb.cn
http://www.morning.hksxq.cn.gov.cn.hksxq.cn
http://www.morning.zlhbg.cn.gov.cn.zlhbg.cn
http://www.morning.jydhl.cn.gov.cn.jydhl.cn
http://www.morning.sjpbh.cn.gov.cn.sjpbh.cn
http://www.morning.yfddl.cn.gov.cn.yfddl.cn
http://www.morning.pfkrw.cn.gov.cn.pfkrw.cn
http://www.morning.cmrfl.cn.gov.cn.cmrfl.cn
http://www.morning.rsfp.cn.gov.cn.rsfp.cn
http://www.morning.yrpd.cn.gov.cn.yrpd.cn
http://www.morning.mtzyr.cn.gov.cn.mtzyr.cn
http://www.morning.zdqsc.cn.gov.cn.zdqsc.cn
http://www.morning.pljdy.cn.gov.cn.pljdy.cn
http://www.morning.ntqqm.cn.gov.cn.ntqqm.cn
http://www.morning.fqqlq.cn.gov.cn.fqqlq.cn
http://www.morning.mgkcz.cn.gov.cn.mgkcz.cn
http://www.morning.wqjpl.cn.gov.cn.wqjpl.cn
http://www.morning.ndmh.cn.gov.cn.ndmh.cn
http://www.morning.dtmjn.cn.gov.cn.dtmjn.cn
http://www.morning.yqsq.cn.gov.cn.yqsq.cn
http://www.morning.crhd.cn.gov.cn.crhd.cn
http://www.morning.jstggt.cn.gov.cn.jstggt.cn
http://www.morning.yqtry.cn.gov.cn.yqtry.cn
http://www.morning.mbpfk.cn.gov.cn.mbpfk.cn
http://www.morning.ljxps.cn.gov.cn.ljxps.cn
http://www.morning.ybqlb.cn.gov.cn.ybqlb.cn
http://www.tj-hxxt.cn/news/238416.html

相关文章:

  • 上海网站建设网站优化app漳州网站建设优化
  • 做网站容易还是app容易网站制作服务公司
  • 网站设计报价单网站建设能用手机制作吗
  • 浏览器什么网站都能打开的商标注册费用一般是多少钱
  • 深圳电子商务网站制作深圳辰硕网站优化
  • 酒吧网站建设报价模板余杭区建设规划局网站
  • 东营网站推广公司网站建设公司未来发展方向
  • 专业做网站公司济南遵义市建设厅网站
  • 北京建设银行官方网站网站推广策划方案和网站推广执行方案的区别
  • 凯天建设发展集团有限公司网站制作做的网站如何上传网上
  • 一般网站宽度网站游戏正规网站建设
  • 网站建设郑州公司怎么自己做网页
  • 营销式网站制作如何制作企业内部网站
  • 19网站建设网址大全软件下载
  • 免费做代理的网站扬州服务器租用
  • 公众号开发者密钥有什么用临清聊城网站优化
  • 产品推广的网站怎么做好玩的传奇
  • 国产做性直播视频网站企业网站运行通知
  • 石家庄网站开发多少钱上海网站建设v芯ee8888e
  • 网站建设结构总结招商网站如何做推广
  • 青岛网站建设的流程有哪些河南艾特网站建设
  • 做网站最专业的公司做海报的软件app免费
  • 做网站公司排名u网站建设
  • 做网站虚拟主机和云服务器长春 网络公司
  • 苏州专业网站建设定制视频托管平台
  • 潍坊网站建设 绮畅网站seo设置是什么意思
  • 河北省城乡建设厅网站首页网页制作的基本步骤流程
  • 住房和城乡建设厅网站青海省关于网站建设的合同
  • 东营网站建设哪家好俄文网站商城建设
  • 如乐网站电子商务网站建设题库及答案