六、函数设计
1.参数规则
如果参数是指针,且仅作输入用,则应在类型前加 const,以防止该指针在函数体内被修改。例如:
void StringCopy(char *dstString , const char *srcString);
如果输入参数以值传递的方式传递对象,则宜改用 " const &" 方式来传递,这样可以省去临时对象的构造和析构过程,从而提高效率。
2.返回值的规则
参数的返回值可以是值类型,指针类型,和引用类型,和函数参数可用类型相同。要仔细区分可以使用的情况。
简单的说,函数内部,在栈上创建的变量,不能用引用类型或指针类型作为返回值。
3.函数内部实现的规则
(1) return语句不能返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数调用结束后会自动销毁。这也是为什么前述内容中需要注意函数返回类型的原因;
(2) 如果函数返回的是一个对象,要注意 return 语句的效率。
4.使用断言
5.引用与指针的比较(重点)
“引用传递”的性质象“指针传递”,而书写方式象“值传递”。实际上“引用”可以做的任何事情“指针”也都能够做,为什么还要“引用”这东西?
答案是“用适当的工具做恰如其分的工作”。
指针能够毫无约束地操作内存中的如何东西,尽管指针功能强大,但是非常危险。就象一把刀,它可以用来砍树、裁纸、修指甲、理发等等,谁敢这样用?
如果的确只需要借用一下某个对象的“别名”,那么就用“引用”,而不要用“指针”,以免发生意外。比如说,某人需要一份证明,本来在文件上盖上公章的印子就行了,如果把取公章的钥匙交给他,那么他就获得了不该有的权利。