上一页 1 2 3 4 5 6 7 8 9 ··· 17 下一页

2013年2月4日

合理使用inline函数提高效率

摘要: 函数调用需要保存现场,并在函数执行完毕之后恢复现场,中间还要经历参数赋值,程序转向一个新位置执行等等。所以函数调用存在一定的时间和空间开销。c++的inline(内联)函数可以用来消除函数调用带来的额外开销,inline函数会在各个调用点内联展开。一般来说,inline函数的定义分为两种:显示方式:inline const string& shorterString(const string &s1, const string &s2){ return s1.size() < s2.size() ? s1 : s2;}隐式方式:c++标准规定在类内部定义了函数体的 阅读全文

posted @ 2013-02-04 18:12 zhuyf87 阅读(2093) 评论(0) 推荐(1) 编辑

c++ 函数声明

摘要: 函数声明由返回类型、函数名和形参列表(这三个元素组成函数原型 function prototype)组成,形参列表可以只包含形参类型而不包含形参名。函数通常在头文件中声明,在源文件中定义。可以给函数添加默认实参,这样编译器会为省略的实参提供默认值。不过,如果有一个形参具有默认实参,那么它后面所有的形参都必须有默认实参。string screenInit(string::size_type height = 24, string::size_type width = 80, char background = ‘ ‘);调用sc... 阅读全文

posted @ 2013-02-04 16:03 zhuyf87 阅读(3096) 评论(0) 推荐(0) 编辑

c语言可变参数函数

摘要: 原文地址:http://www.ibm.com/developerworks/cn/linux/l-va/index.html原文名称为“深入浅出VA函数”,这里只转载前两个部分,关于后面的编译器如何实现等内容,由于不是很需要,所以没有转载。VA函数(variable argument function),参数个数可变函数,又称可变参数函数。C/C++编程中,系统提供给编程人员的va函数很少。*printf()/*scanf()系列函数,用于输入输出时格式化字符串;exec*()系列函数,用于在程序中执行外部文件(main(int argc, char* argv[]算不算呢,与其说main( 阅读全文

posted @ 2013-02-04 10:48 zhuyf87 阅读(475) 评论(0) 推荐(0) 编辑

2013年2月3日

c++ 数组形参

摘要: 数组形参会被弱化为指针,所以处理数组的函数通常通过指向数组中元素的指针来处理数组。// three equivalent definitions of printValuesvoid printValues(int *) { /* … */ }void printValues(int []) { /* … */ }void printValues(int [10]) { /* … */ }上面3种定义等价,形参类型都是int *,通常使用第1种。第2种形式虽然看起来更直观,但容易引起误解,因为函数操纵的毕竟不是数组本身,而是指向数组元素的指针。第3种形式的数组长度是被忽略的,这里的10并无实际 阅读全文

posted @ 2013-02-03 16:16 zhuyf87 阅读(7444) 评论(0) 推荐(0) 编辑

2013年2月1日

使用do{ } while(0);有什么好处?

摘要: 原帖地址:http://bbs.csdn.net/topics/390361821?page=1#post-393624278【gq414047080】:_Api(){ do { //do something }while(0);}这样的写法有什么好处啊?将楼主的问题扩展一下,do{} while(0);的用处都有什么?不仅限于楼主所贴代码的使用形式。这里整理一些(我觉得)比较有意义的回帖:【happynesslele】:有时候只是为了代码分块,比仅仅使用{}更直观些。bool CCLayer::init(){bool bRet = false; ... 阅读全文

posted @ 2013-02-01 18:30 zhuyf87 阅读(8708) 评论(1) 推荐(1) 编辑

c++ 显示类型转换

摘要: c++引入了4个新的强制类型转换操作符,static_cast、dynamic_cast、const_cast、reinterpret_cast,用以支持更为精细的类型转换。这些操作符取代了以往小圆括号所代表的旧式转型,能够清楚阐明转型的目的。这些新式转型操作符给了编译器更多信息,让编译器清楚知道转型的理由,并在转型失败时释出一份错误报告。1. static_caststatic_cast在功能上基本上与C风格的类型转换一样强大,所以它是4个操作符中最常用的那个。但它也有功能上的限制,例如static_cast 不能从表达式中去除const属性(这是const_cast的工作)。int fir 阅读全文

posted @ 2013-02-01 17:46 zhuyf87 阅读(805) 评论(0) 推荐(0) 编辑

c++ 隐式类型转换

摘要: 隐式类型转换由编译器自动执行,不需程序员介入。何时发生隐式类型转换1. 在混合类型的表达式中,操作数会被转换为相同类型int ival;double dval;ival >= dval; // ival converted to double2. 条件表达式会被转换为bool类型。int ival;if (ival) // ival converted to boolwhile (cin) // cin converted to bool条件操作符(? :)中的第一个操作数,逻辑非(!)、逻辑与(&&)、逻辑或(||)的操作数都是条件表达式。if、while、do whi 阅读全文

posted @ 2013-02-01 12:40 zhuyf87 阅读(7113) 评论(0) 推荐(0) 编辑

2013年1月31日

c++ 自增、自减 操作符

摘要: 自增(++)和自减(--)操作符,都分为前置(++i、--i)和后置(i++、i--)两种形式。应该优先使用前置形式,只在必要时使用后置形式。道理很简单:前置操作符需要做的工作更少,只需加1后返回结果即可。而后置形式需要先保存操作数原来的值,然后加1,再返回原来的值。对于内置类型,编译器可以对后置进行优化。但对于非内置类型,后置操作符所做的额外工作可能会花费很大的代价。所以养成使用前置操作这个好习惯,就不必操心性能差异的问题。不过有时的确需要返回变量加1前的值,这时就必须要使用后置操作符了。比如下面这段代码非常“流行”:vector<int>::iterator iter = iv 阅读全文

posted @ 2013-01-31 18:53 zhuyf87 阅读(376) 评论(0) 推荐(0) 编辑

c++ 函数指针

摘要: void (*funcPtr) ();funcPtr是一个函数指针,它所指向的函数无参无返回值。*funcPtr一定要用括号括起来,否则“void *funcPtr();”会被编译器看做是一个函数声明,返回值为void *。有时候函数指针可能被定义的很复杂,以至于很难看清其具体类型。想要准确分析出一个复杂的函数指针定义,最好的办法是从“变量名”开始,以“先右后左”的方式向外扩展分析。float (*(*fp)(int, int, float)) (int);首先fp右边什么也没有,左边是*,且*fp以括号括起来,所以fp是一个函数指针。再向右看“(int, int, float)”,所以fp指 阅读全文

posted @ 2013-01-31 17:43 zhuyf87 阅读(635) 评论(0) 推荐(0) 编辑

c++ 指针与 typedef

摘要: 当同时使用const和typedef修饰指针时,容易产生误解。typedef string *pstring;const pstring cstr;cstr具体的类型是什么?很容易错误理解为“const string *cstr;”,也就是说cstr是常量指针(指向string类型const对象的指针),其实这是错误的。并不能简单把“const pstring cstr;”中的pstring仅仅作文本扩展,变为“const string *cstr;”。声明const pstring时,const修饰的是pstring类型,pstring是一个指针,因此cstr是一个const指针(指向str 阅读全文

posted @ 2013-01-31 15:38 zhuyf87 阅读(208) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 7 8 9 ··· 17 下一页

导航