文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何解析学习C++时的疑难问题

2023-06-17 17:32

关注

本篇文章为大家展示了如何解析学习C++时的疑难问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

许多编程人员学习C++总结经验为,有的觉得C++语言是一门独立的语言,并不是在C语言的基础上,可以直接学习C++不必先从C下手,这就像C++与Java一样,局部的结构还是不一样的。

C++作为一种通用的程序设计语言已相当成功的实现了她最初的设计目标:高效率,通用性,可扩展性与灵活性;是一种语言而不是一个系统;她给予程序员尊重而不是束缚等等。

其实,学习C++时,它还支持一种被称为模板元编程的泛型程序设计范型,其核心就是巧妙利用C++的模板机制与面向对象的机制将程序对数据的处理提前到编译期,而不是运行时。这种程序设计方式如同函数式的编程方式。在这种设计范型中没有变量与循环,但其图灵完备所以称其为元编程。

接下来我将举一个简单的例子看看这种程序设计对运行时效率的影响。有这么一组数列1,1,2,3,5,8,13,21,等等,最前一,二项是1,以后每一项是其前两项的和。现在我们编程计算第N项的数值。程序如下:

//CODE  #include "stdafx.h"  //编译期计算方法  template <int n>  //主模板 计算数列第N项  struct f  {   enum {value=f<n-1>::value+f<n-2>::value};  };  template<> struct f<1>  //特化模板  数列***项是1  {   enum {value=1};  };  template<> struct f<2>  //特化模板  数列第二项是1  {   enum {value=1};  };  //远行时计算方法  long F (long n)  {   if (n==1 || n==2)  //数列***,二项是1直接返回   {    return 1;   }   else      //递归   {    return F(n-1)+F(n-2);   }  }  int _tmain(int argc, _TCHAR* argv[])  {   std::cout<<f<45>::value<<std::endl; //计算第45项的数值   std::cout<<F(45)<<std::endl;   return 0;  }

特化模板就如同我们循环的终止条件,在模板的递归实例化过程中充当递归终止条件。当主模板的N降为1或2时,模板递归实例化停止,开始计算value的数值。有人会问:为什么当N等于1或2时,编译器会根据特化模板实例化呢?

还记得C++对函数的调用规则吗?学习C++在调用重载函数过程中,编译器会寻求最匹配的一个。其实,在C++中,当编译器发现有众多被选项时,它会选择***条件,最匹配的那个。这不是很合理吗?

我想接下来的代码就是你我非常熟悉不过的了,一个递归函数,测试代码,程序结果:

template<>  struct f<1>  //特化模板  数列***项是1   {    enum {value=1};   };   template<>  struct f<2>  //特化模板  数列第二项是1  {    enum {value=1};   };

有人会问:问号是什么意思?其实是“不知道”的意思。***行不到1秒(其实更短)就输出了,而和它一模一样运行时的结果却让我等得花儿都谢了。为什么会这样呢?编译期学习C++运行时计算秘密在于?:***行的结果在程序运行时结果已经早就被算出来了,程序只要简单的输出即可;

而它的同胞兄弟还在运行时堆栈里漫游了。模板实例化发生在程序构造阶段——编译期,所以有关的计算都发生在编译期,即编译期计算。而普通的递归函数运行于程序的运行期,其执行要牵涉大量的堆栈操作,有关计算必须在运行时计算。由以上的直观体验我们可以看到编译期计算对程序运行时的效率提高的影响是巨大的。

上述内容就是如何解析学习C++时的疑难问题,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯