热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

内联模板C++快速入门46

内联模板让编程改变世界Changetheworldbyprogram内联函数内联即inline,可能很多鱼油虽然听过这个词儿但却不是太熟悉,因为平时用之

内联模板  

让编程改变世界

Change the world by program


 

内联函数

  内联即inline,可能很多鱼油虽然听过这个词儿但却不是太熟悉,因为平时用之甚少?! 我们第一想到的是内联函数,引入内联函数的目的是为了解决程序中函数调用的效率问题。 内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。编译时,类似宏替换,使用函数体替换调用处的函数名。 一般在代码中用inline修饰,但能否形成内联函数,需要看编译器对该函数定义的具体处理。   举个栗子: [codesyntax lang="cpp"]

inline int add (int x, int y, int z)
{return x+y+z;
} [/codesyntax] 在程序中,调用其函数时,该函数在编译时被替代,而不像一般函数那样是在运行时被调用。  

内联模板

  可以看到,类模板和函数模板的创建过程几乎没有什么区别。 “把相关代码放在一起”这条重要规则同样适用于类模板。 不管是什么模板,编译器都必须看到全部的代码才能为一种给定的类型创建出一个新的实现来。 在创建类模板时,避免类声明和类定义相分离的一个好办法是使用内联方法。   在类里,内联方法的基本含义是在声明该方法的同时还对它进行定义。 [codesyntax lang="cpp"]

class Person
{Person(std::string name){this -> name = name;}// … …
} [/codesyntax]   除了可以更好地帮助编译器处理类模板之外,使用内联方法还有一个很好的作用:可以让你少打些字并让源代码的可读性变得更好。 好了,让我们一起来改善上节课的栈程序(源代码下载)  

注意

  如果你打算在自己的程序里使用Stack模板,一定要给它增加一个副本构造器和一个赋值操作符重载,就像我们之前做过的例子一样! 我们刚刚的代码还缺少必要的错误处理功能,例如在栈已满的时候调用push()方法,或者在栈为空的时候调用pop()方法,会导致程序运行出错。 我们应该设法让栈在遇到这两种情况的时候抛出一个异常来处理。   C++并没有限制只能使用一个类型占位符,如果类模板需要一种以上的类型,根据具体情况多使用几个占位符即可。 [codesyntax lang="cpp"]

template
class MyClass
{// … …
} [/codesyntax]   在实例化时,我们只需要这么做: MyClass myClass; [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://urlxf.qq.com/?7Vb2iqv']视频下载[/Downlink] [Downlink href='http://kuai.xunlei.com/d/LZKTTYVEDEXT']备胎下载[/Downlink]

转:https://www.cnblogs.com/LoveFishC/archive/2012/08/17/3847214.html



推荐阅读
  • 编程语言是从哪蹦出来的——大型伦理寻根现场
    Hello,我是Alex007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫Alex的人太多了,再加上每天007的生活,Alex007就诞生了。聊一聊编程到底是啥,怎 ... [详细]
  • 下载器,就是一种网络工具,从网络中接收自己想要的数据。下载器是一个网络客户端。它的下载流程无非就是客户端连接服务器端,然后发送资源下载请求 ... [详细]
  • PIMPL 是 C++ 中的一个编程技巧,意思为指向实现的指针。具体操作是把类的实现细节放到一个单独的类中,并用一个指针进行访问 ... [详细]
  • IDEA实用插件Lombok
    LombokLombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。通常,我们所定义的对象和b ... [详细]
  • 编译原理c语言词法分析器,用C语言实现一个真正的词法分析器
    词法分析,是编译器的第一个模块,也是最简单的模块。最简单,指的是相对于编译器这种大型程序而言,与一般的代码相比还是有点复杂的 ... [详细]
  • 什么是API接口?给大家举例说明
    Api接口也就是所谓的应用程序接口,api接口的全称是ApplicationProgramInterface,通过API接口可以实现计算机软件之间的相互 ... [详细]
  • Educational Codeforces Round 43 (Rated for Div. 2)
    EducationalCodeforcesRound43(RatedforDiv.2)https:codeforces.comcontest976A ... [详细]
  • 1、创建高级对象使用构造函数来创建对象构造函数是一个函数,调用它来例示并初始化特殊类型的对象。可以使用new关键字来调用一个构造函数。下面给出了使用构造函数的新示例。 ... [详细]
  • 小编给大家分享一下python怎么获取引用对象的个数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有 ... [详细]
  • 获取原始语音系统图使用matlab生成一个测试用的单频信号,1KHz,1Vrmsclcclearall;closeall;f1000;%定义信号频 ... [详细]
  • WebBrowser控件(1)
    WindowsPhone7内置了一个强大的网络浏览器,该浏览器的内核是基于桌面版的InternetExplorer7(Mango版基于InternetE ... [详细]
  • 本文翻译自:WhatisaMavenartifact?什么是神器?为什么Maven需要它?#1楼参考:https:sta ... [详细]
  • Day 5 20190120 老男孩python学习第5天 内容整理
    今天继续看MasteringPycharm的视频,一个半小时看git的教学视频:视频1小时44分钟,看了2个半小时以上https:www.youtube ... [详细]
  • 本人先前是linux的支持都,使用过后就成为了其的鄙视者,观点如下:linux想跟windows比,tmd先搞好软件安装的问题。在linux在动不动就要命令行,有多少人会这恶心的命令行。会命令 ... [详细]
  • Qt 学习笔记(5)绘图   五子棋游戏
    在上一篇博客CQt学习笔记(4)绘图中介绍了Qt中的绘图方法,基于上一篇的博客的知识,使用QPainter设计一个五子棋的棋 ... [详细]
author-avatar
LF猫咪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有