《高质量C++/C编程指南》读书笔记之二

第六章

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运算符。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值