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) 编辑

区分“常量指针”和“指针常量”

摘要: 指向const常量的指针(常量指针):关键字 const出现在*号左边,表示指针所指向的地址的内容是不可修改的,但是指针自身可变,也就是指针本身可以修改以指向其他内容。如:const int * p1 = &i;int const * p2 = &i;const指针(指针常量):关键字const出现在*号右边,表示指针自身不可变,但其指向的地址的内容是可以修改的。如:int * const p3 = &i;指向const常量的const指针:指针自身不可修改,指针所指向的内容也不可以修改。如:const int * const p4 = &i;int const 阅读全文

posted @ 2013-01-31 14:50 zhuyf87 阅读(207) 评论(0) 推荐(0) 编辑

c++ 指针与引用的区别

摘要: 指针与引用看上去完全不同(指针用操作符“*”和“->”,引用使用操作符“.”),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢?首先,要认识到在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量。相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用。“但是,请等一下”,你怀疑地问,“这样的代码会产生什么样的后果?”char *pc = 阅读全文

posted @ 2013-01-31 12:26 zhuyf87 阅读(214) 评论(0) 推荐(0) 编辑

导航