2007-2-21 15:43 ak47
读钱能的C++有感(函数篇)

一. 函数
+C3t L(viF3A
Si4W^t 1.C++不允许函数定义嵌套,即在函数定义中再定义一个函数是非法的。'N,X#\*R5NW'\y?
(}-[ qT }|Zu&B
2.return语句起到了改变计算顺序的作用,因为return是返回语句,它将退出函数体,所以该语句之后的语句不会被执行了。0{ dK*w&JB
Ow@d|CTp
3.全局变量与局部变量。y7C7ouNJ&z|g;D

4g4B2NQx[T z 程序的内存区域。!cV1Ol~g#Q%z
             一些变量在整个程序中都是可见的,它们称为全局变量,一些变量只能在一个函数中可知,称为局变变量。
*t0Y;tGU
yN&teF&u%D            程序将操作系统分配给其运行的内存块分为4个区域:代码区,全局数据区,堆区,栈区;全局数据区存放程序的全局数据和静态数据,堆区存放程序的动态数据,栈区存放程序的局部数据,即各个函数中的数据。
v1O/pPV~G A I5TZ%~G
         全局变量由编译器建立,并且初始化为0,而局部变量的类型修饰是auto,表示该变量在栈中分配空间,但习惯上省略auto.函数中的局部变量存放在栈区,在函数开始运行时,局部变量在栈区被分配空间,函数退出时,局部变量随之消失;局部变量没有初始化,如果局部变量不被显式初始化,那么,其内容是不可预料的。+nR g+H^ S Q],If gi
Ys`t CY&u
        静态局部变量:其存放在内存的全局数据区,函数结束时,静态局部变量不会消失,每次该函数调用时,也不会为其重新分配空间,直到程序运行结束;静态局部变量的初始化也为0;静态局部变量只在定义它的函数中可见。静态局部变量的用途,可以使用它确定某函数是否被调用过,使用它保留多次调用的值。
btu#N{@ wy8GV&mf'G6V
4.内联函数 .^ Z2I$hC

:^c9K6FQam   内联函数也称内嵌函数,它主要是解决程序的运行效率。#b%S,t)Dp7E9L

Ci t4{srGZ)L(V 编译器看到inline后,为该函数创建一段代码,以便在后面每次碰到该函数的调用都用相应的一段代码替换,内联函数可以在一开始只声明一次。
:L,cU)D0V#~t$g 注意:内联函数必须在被调用之前声明或定义,因为内联函数的代码必须在被替换之前已经生成被替换的代码。 Dr|*} NJB k2A
内联函数中,不能含有复杂的结构控制语句,如switch和while,如果内联函数有这些语句,则编译将该函数视同普同函数那样产生函数调用代码;另外,递归函数是不能被用来做内联函数的;内联函数只适合于只有1-5行的小函数。
5f0l/|G8O@ 5.默认参数的函数不清+X Hi*l1w
0Zvs J @3G$H0w
    当又有声明又有定义时,定义中不允许默认参数。如:`x+lE%W R
                void point(int=3,int=4);
8ac#u7EMW)GyE
!uxQ{g                 void point(int x,int y)//定义中不允许再给出默认值。
M&ojmm\,d
w\3C4hPBr;G                {
J"iAO+oK "UG%LgT0^brP
                }
I4ad9V X
@jH:M\ o8}1E       默认参数与函数重载/s-UiU8H;At$V&O
                  如果一组重载函数(可能带有默认参数)都允许相同实参个数的调用,将会引起调用的二义性。
)`|9pG8~ X8G
/u5cz L&K Fw!a,V.j 总结:内联函数是为了提高编程效率而实现的,它克服了用#define宏定义所带来的弊病。

2007-9-12 10:51 红影
函数的使用面是非常广的

2007-9-28 08:44 ayg0306
呵呵这本书我也看过的

2007-10-10 20:48 daimooc
我刚学C++也用的这本书,但感学有点难度。

2007-10-18 18:48 皓月2003
钱能的书感觉第一版比较好,适合对c++入了一点门的人当作第2本c++的入门教材来看。itL3~7Y
如果你之前一点c++底子都没有,感觉看这本书有点深。
GuitDS:}{0AMY 另外,他的第二版改动比较大,加大了很多模板、stl这些泛型编程的材料,虽然这个是学c++的趋势,但是不适合入门的人看了,对于初学者我个人觉得没第一版好。

2007-11-5 21:50 duanmu1123
不错,希望楼主天天有感而发

2008-4-18 09:51 uughost
有道理,我感觉第二版不如第一版的好:D

页: [1]


Powered by Discuz! Archiver 5.0.0  © 2001-2006 Comsenz Inc.