摘要: 1、如果输入参数采用“指针传递”,那么加const 修饰可以防止意外地改动该指针指向的内存单元,起到保护的作用。 例如:void StringCopy(char *strDest, const char *strSrc); void OutPutString(const char *str);2、如果输入参数采用“值传递”,由于函数将自动用实参的拷贝初始化形参,因此即使在函数内部修改了该参数,改变的也只是堆栈上的拷贝而不是实参,所以一般认为不需要用const 修饰。 对于ADT/UDT的参数而言,像void Func(A a)这样声明的函数注定效率比较低。因为函数体内产生A类型的... 阅读全文
posted @ 2013-08-15 20:27 wiessharling 阅读(307) 评论(0) 推荐(0)
摘要: 之前有看过关于Assert的书,但是不懂得如何去用,最近看别人写的代码有用这个断言(assert),今天自己动手看看如何使用断言。 断言(assert)的语义如下:如果表达式的值为0(假),则输出错误消息并终止程序的执行(一般还会出现提示对话框,说明在什么地方引发了assert);如果表达式为真,则不进行任何操作。因此断言失败就表明程序存在一个bug. C++/C 的宏assert(expression)就是这样的断言,当表达式为假时,调用库函数abort()终止程序。 程序一般分为Debug版本和Release版本,前者用于内部调试,后者用于发行给用户使用。由于 assert(expr... 阅读全文
posted @ 2013-08-15 17:18 wiessharling 阅读(344) 评论(0) 推荐(0)
摘要: 注意事项如下: 1. return 语句不可返回指向"堆栈内存“的”指针“或者”引用“,因为该内存单元在函数体结束时被自动释放。//错误char* Func(void){ char str[] = "hello world"; return str;}//正确const char* Func(void){ const char* p = "hello world";//字符串常量存放在程序的静态数据区 return p;} 2. 如果函数返回值是一个对象,要考虑return 语句的效率。 例如: return String(s1 + s2); 阅读全文
posted @ 2013-08-15 16:51 wiessharling 阅读(354) 评论(0) 推荐(0)
摘要: 做开发一定会调用到自己定义或者他人定义的函数,而函数调用必须通过堆栈来完成。 函数堆栈实际上使用的是程序的堆栈内存空间,虽然程序的堆栈段是系统为程序分配的一种静态数据区,但是函数堆栈却是在调用到它的时候才动态分配的。#include "stdafx.h"#include using namespace std;class TestArrange {public: long m_lng; char m_ch1; TestArrange() { m_lng = 0; m_ch1 = 'a'; m_int = 0; m... 阅读全文
posted @ 2013-08-15 15:43 wiessharling 阅读(731) 评论(0) 推荐(0)