第六章
1.
2.值传递,地址传递,引用传递(C++中增加的)
3.return语句不可返回指向“栈内存”的指针或“引用”,因为该内存在函数体结束时被自动销毁。
4.函数的功能要单一,不要设计多用途函数。
5.建议尽量少用static局部变量。
6.不仅要检查输入参数的有效性,还要检查通过其它途径进入函数体内的变量的有效性。例如全局变量,句柄等。
关于函数相关的操作,是比较深奥的,对其参数,返回值,是按什么方式调用,以及相应内存是否会有变化,以及C++所涉及到的构造函数,析构函数的调用等,需要用更多的时间来研究他们。
参数的规则:
a.参数的书写要完整,不要只写参数类型而不写其参数名字
b.参数要命名得当,顺序要合理。
c.如果参数是指针,且仅作输入用,则应在类型前加const,以防止该指针在函数体内被意外修改。
d.避免函数有太多的参数,尽量控制在5个以内。
e.如果输入函数以值传递的方式传递对象,则宜改用“const &”方式来传递,这样可以省去临时对象的构造和析构的过程,从而提高效率。
f.尽量不要使用类型和数目不确定的参数。
返回值的规则:
a.不要省略返回值的类型。
b.函数名字与返回值类型在语义上不可冲突。 违反这条规则典型的代表是C库的标准函数getchar().它是int类型。
c.不要将正常值和错误标致混在一起返回。正常值用输出参数获得,而错误标致用return语句返回。
d.有些函数原本不需要返回值,但为了增加灵活性如链式表达式,可附加返回值。
-------------------------------------------------------------------------
引用和指针的区别?
@1.初始化要求不同。引用在创建的同时必须初始化,而指针在定义时不必初始化,可以在定义后面的任何地方 重新赋值。
@2.可修改性不同。 引用一旦被初始化,它就不能被另一个对象引用,而指针在任何时候都可以指向另一个对 象。
@3.不存在NULL引用。引用不能指向值的引用,它必须指向某个对象,而指针则可以是NULL,不需要总是指向某 个对象,可以指向任意对象,所以指针更加灵活,也容易出错。
@4.测试时的区别。 由于引用不会指向空值,这就意味着引用之前不需要测试它的合法性,而指针经常需要测 ,因此使用引用的代码率比使用指针高。
@5.应用的区别。 若指向一个对象后就不会改变其指向,那么应该使用引用,若指向NULL或在不同的时刻指 不同的对象,则应使用指针。
-------------------------------------------------------------------------
为什么引用比指针安全。
@1.由于不存在空引用,并且引用一旦被初始化指向一个对象,它就不能被改变为另一个对象的引用,因此引用很安全。
@2.指针可以随时指向别的对象,并且不被初始化或被初始化为NULL,所以不安全。
****引用的主要功能是传递函数的参数或返回值。********
7.试图用指针参数去申请动态内存是错误的。
8.指针消亡了,并不表示它所指的内存会被自动释放。
9.内存被释放了,并不表示会被消亡或者成了NULL指针。
-------------------------------------------------------------------------
有了malloc/free,为什么还要new/delete?
对于非内部数据类型的对象而言,对象在创建时自动执行构造函数,消亡之前还要自动执行析构函数,由于malloc/free函数是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free函数,因此只能使用new/delete运算符。