c++复习——侯捷版

c++ primer

effective c++中文版

STL源码剖析——侯捷

在.h中进行防卫式声明,如果没有定义过它,那么就定义它。如果定义了,那么就不会进去,也就是下图框中的内容

 1是声明,2是对声明的定义,那么还需要提前弄个声明,那么就是0 

 类的组成部分

 先有头,再有具体的内容,有些函数是直接在类里面定义,有些是在类之外定义

 模板(class template)简介

将实部和虚部变量的类型不写死,如下图所示,T没写明具体类型,当我想具体使用的时候,我再去指定具体的类型,比如下面没有写死,在具体应用的时候,指明T的类型是double和int类型

 内联函数(inline)

一些函数如果被重复调用,就会有函数不断地入栈,会造成栈空间和栈内存的大量消耗。


#include <stdio.h>  
 
//函数定义为inline即:内联函数  
inline char* dbtest(int a) 
{  
	return (i % 2 > 0) ? "奇" : "偶";  
}   
  
int main()  
{  
	int i = 0;  
	for (i=1; i < 100; i++) 
	{  
		printf("i:%d    奇偶性:%s /n", i, dbtest(i));      
	}  

比如上面的程序,使用inline,任何调用dbtest(i)的地方都换成了(i%2>0)?"奇":"偶"这样就避免了频繁调用函数对栈内存重复开辟所带来的消耗。也就是说将setest的代码直接放入到main函数里面,这样在执行for循环时,不需要重复开辟一个函数栈。

      inline只适合函数体内代码简单的函数数使用,不能包含复杂的结构控制语句例如while、switch,并且内联函数本身不能是直接递归函数(自己内部还调用自己的函数)。

    内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间

关键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用

不能成为inline函数

inline void Foo(int x, int y); // inline 仅与函数声明放在一起
void Foo(int x, int y)
{
}

是inline函数

void Foo(int x, int y);
inline void Foo(int x, int y) // inline 与函数定义体放在一起
{
}

重载

构造函数

构造函数放在private里面 可以来实现单例

posted @ 2022-05-15 21:48  贪睡地蜗牛  阅读(48)  评论(0编辑  收藏  举报