c++第十七章-(内联函数)

1.内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。编译时,类似宏替换,使用函数体替换调用处的函数名。

一般在代码中用inline修饰,但能否形成内联函数,需要看编译器对该函数定义的具体处理。

such as:

inline int add(int a,int b,int c)
{
  return a+b+c;
}

不管是什么模板,编译器都必须看到全部的代码才能为一种给定的类型创建出一个新的实现来。

内联方法的引入很好的解决了在创建类模板时,避免类声明和类定义相互分离。

在类里,内联方法的基本含义是在声明该方法的同时还对它进行定义。减少模板的声明,类的内联such as:

class Person
{
        Person(std::string  name)
        {
                   this -> name = name;
        }
}        

...

类的内联Demo

template <class T>
class Stack
{
public:
    Stack(unsigned int size = 100)
    {
        this -> size = size;
        data = new T[size];//初始化一个泛型数组
        sp = 0;
    }
    ~Stack()
    {
        delete []data;
    }
    void push(T value)
    {
        data[sp++] = value;
    }
    T pop()
    {
        return data[--sp];
    }

private:
    unsigned int size;//数组容器data的大小
    unsigned int sp;//栈的当前位置
    T *data;//存储入栈的数组
};

int main()
{
    Stack<int> intStack(100);

    intStack.push(1);
    intStack.push(2);
    intStack.push(3);

    std::cout << intStack.pop() << "\n";
    std::cout << intStack.pop() << "\n";
    std::cout << intStack.pop() << "\n";
}

.注意

如果你打算在自己的程序里使用Stack模板,一定要给它增加一个副本构造器和一个赋值操作符重载,就像我们之前做过的样子一样。

我们刚刚的代码还缺少必要的错误处理功能,例如在栈已满的时候调用push()方法,或者在栈为空的时候调用pop()方法,会导致程序出错。

c++并没有限制只能使用一个类型占位符,如果类模板需要一种以上的类型,根据具体情况可以使用几个占位符即可。

template<class T,class U>
class MyClass
{

}
// 实例化时,我们只需要这么做
MyClass<int,float> myClass;

...

c++第十七章-(内联函数)

时间: 2024-10-08 16:14:01

c++第十七章-(内联函数)的相关文章

第2章 重新组织函数(2):内联函数和内联临时变量

2. 内联函数(Inline Method) 2.1 动机 (1)在函数调用点插入函数本体,然后移除该函数. (2)有时遇到某些函数,其内部代码和函数名称同样清晰易读,采用内联函数可以提供代码的执行速度(因为少掉了函数调用的开销) (3)在Replace Method withd Method Object之前,将一些组织不合理的函数内联到一个大型函数,再从中提炼组织合理的小型函数时效果很好. (4)使用太多的间接层时,特别是一部分函数只是对另一个函数的简单委托时,可同去掉一些无用的间接层. 2

重构笔记——内联函数

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42261333         在上一篇文章中介绍了"提炼函数".本文将介绍"内联函数"这种重构手法.         下面让我们一起来学习该重构手法把. 开门见山         发现:一个函数的本体与名称同样清楚易懂. 解决:在函数调用点插入函数本体,然后移除该函数. //重构前 public int getRati

关于C++内联函数

关于C++内联函数有以下实验: 有三段测试代码 1.手动展开内联函数. 2.非内联函数. 3.inline标记的内联函数.(函数只有一行代码,以确保函数被内联) 测试三种情况: VS工程在Release版下的有关内联的三个设置选项 1./Ob0 禁用内联展开(默认情况下是打开的). 2./Ob1 只展开标记为 inline 或 __inline 的函数,或在类声明内定义的 C++ 成员函数中的函数. 3./Ob2 展开标记为 inline 或 __inline 的函数和编译器选择的任何其他函数(

java内联函数

在说内联函数之前,先说说函数的调用过程. 调用某个函数实际上将程序执行顺序转移到该函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到  转去执行该函数前的地方.这种转移操作要求在转去前要保护现场并记忆执行的地址,转回后先要恢复现场,并按原来保  存地址继续执行.也就是通常说的压栈和出栈.因此,函数调用要有一定的时间和空间方面的开销.那么对于那些函数体  代码不是很大,又频繁调用的函数来说,这个时间和空间的消耗会很大. 那怎么解决这个性能消耗问题呢,这个时候需要引入内联函数了.内联函数

内联函数详解

什么是内联性和外联函数 类的成员函数可以分为内联函数和外联函数.内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内.而说明在类体内,定义在类体外的成员函数叫外联函数.外联函数的函数体在类的实现部分. 内联函数在调用时不是像一般的函数那样要转去执行被调用函数的函数体,执行完成后再转回调用函数中,执行其后语句,而是在调用函数处用内联函数体的代码来替换,这样将会节省调用开销,提高运行速度. 内联函数与前面讲过的带参数的宏定义进行一下比较,它们的代码效率是一样的,但是内联函数要优于宏定义

内联函数的定义及说明

一.什么叫inline函数? inline(小心,不是online),翻译成"内联"或"内嵌".意指:当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置.这样做的好处是省去了调用的过程,加快程序运行速度.(函数的调用过程,由于有前面所说的参数入栈等操作,所以总要多占用一些时间).这样做的不好处:由于每当代码调用到内联函数,就需要在调用处直接插入一段该函数的代码,所以程序的体积将增大.拿生活现象比喻,就像电视坏了,通过

宏定义与内联函数

1.宏定义的规则和使用解析(1)宏定义的解析规则就是:在预处理阶段由预处理器进行替换,这个替换是原封不动的替换.(2)宏定义替换会递归进行,直到替换出来的值本身不再是一个宏为止.(3)一个正确的宏定义式子本身分为3部分:第一部分是#dedine ,第二部分是宏名 ,剩下的所有为第三部分.(4)宏可以带参数,称为带参宏.带参宏的使用和带参函数非常像,但是使用上有一些差异.在定义带参宏时,每一个参数在宏体中引用时都必须加括号,最后整体再加括号,括号缺一不可. 宏定义示例1:MAX宏,求2个数中较大的

C++内联函数总结

C++内联函数 Inline函数,看起来像函数,动作像函数,没有宏的副作用,可以调用它们又没有函数调用的额外开销.多好的内联函数 实际上,获得的比想象的还要多,避免函数调用的额外开销只是它好处的一部分而已.编译器还可以通过最优化机制(被设计用来浓缩那些'不含函数调用的代码'的代码),所以当inline某个函数,编译器可能就有能力对它执行语境相关最优化. 但是函数调用会增加目标代码的大小,然而,如果inline函数的本体很小,编译器针对'函数本体'产出的代码可能比'函数调用'产生的目标代码更小.

谈谈 OC 中的内联函数

内联函数 即在编译的时候将函数体替换函数调用,从而不需要将parameter,returnaddress进行push/pop stack的操作, 从而加速app的运行,然而,会增加二进制文件的大小. 疑问:内联函数和非内联函数有很大不同吗? 解答:对硬件硬性不大,但在性能上有影响. 内联函数不能保证编译时候一定是内联的,内联仅仅是告诉编译器请求内联,但编译器不一定内联. 内联函数的使用场景: OC--->结构体CGRectMake--->在快速赋值的时候就是调用了其内联函数 CG_INLINE