C++经验(个人见解)

C/C++ Jenner 9898℃ 0评论

1.  定义变量的小习惯:

定义变量时要养成初始化的好习惯,尤其是对指针变量。初始化时尽量用变量后加括号的形式进行初始化。这与用“=”进行初始化有细微的区别。用“=”进行初始化时,系统默认调用的是拷贝构造函数,而在变量后面加上括号的形式进行初始化时,系统默认调用的构造函数。对于C++基本数据类型来说,这并无大的区别,然而对于对象来说却有可能达不到我们想要的效果。

例: int  x = 0;   拷贝式初始化

int  x(0);    构造式初始化

虽然这个细节对于编程来说无伤大雅,但对于一个优秀的程序员来说,养成一个良好的编程习惯是必须的。参考文献(C++primer)。

2.  多返回值情况:

个人总结出两种让函数有多返回值的方法。第一种即为函数返回值为数组或向量,或其他类似结构,都可实现多返回值。第二种则为设置引用参数,这点位本人个人观点,可能表达上有些错误,敬请见谅;详细的说就是利用引用参数而代替函数的返回值,当我们需要一个函数返回一个布尔类型的值并且需要函数对某些数据进行修改时,这种方法很有用处;或许这不能说是函数多返回值,只是个人觉得这样理解比较好懂。

3.  利用多个布尔类型以及整形的乘积的和判断事件发生情况:

打个比方,求一个数被3,5,7整除的情况,要求一次性输出结果。则可以判断是否能被3,5,7整除并将返回的布尔数与1,2,3相乘,再相加,每种不同的情况将有不同的结果,这时我们则可以采用SWITCH语句进行简单的判断即可达到一次性输出的目的。

4.  养成使用内联函数的习惯:

内联函数是C++对于C的宏定义的替代品,对于用inline生命的函数,编译器将尝试将函数编译到函数被调用的地方,从而省去了函数调用的麻烦。Inline函数要求不可以有复杂的控制结构,循环等都是不允许出现在内联函数中的。换一种说法就是,如果函数中有过于复杂的控制结构,编译器将放弃对其内联的尝试。关键字inline对于编译器来说只是一种建议,而编译器是可以不去执行的。在类中我们可以把一些常用到的数量不多的代码分离出来定义成内联函数,从而减轻我们编程的复杂度。

5.  指针的威胁:

有人说指针是安全隐患的罪魁或有,也有人说妙就秒在指针。对于这两种说法,我个人更偏向于后一种。指针是有着强大功能的数据类型,虽然因为它而产生了好多安全隐患,但作为程序员我们应该学会如何去避免这些问题的产生。

当我们定义一个指针变量时,我们应尽可能的将其进行初始化。这一点在第一点中已经强调。对于为初始化的指针我们成为野指针,野指针对于程序来说是相当危险的,如果我们尝试去使用一个野指针,或删除野指针所指向的内存空间时,都会发生严重的错误而导致程序停止运行或者其他严重的后果。

当我们释放掉一个动态申请的指针时,也应将指针值置为NULL(或为0),这样我们就无法对其进行操作了。

当我们用两个或多个指针指向同一块动态申请的内存空间时,应小心多次对同一片内存空间进行删除。从程序的用户的角度来讲,发生这种情况时计算机会产生蓝屏的现象并将出现错误的地址显示在屏幕上。避免这种情况有两种方法:第一,删除动态存储空间后将其他指针置空;第二,删除动态存储空间后将其他指针指向其他内存空间。

总之我们应该让指针的指向在我们的把握之中才是解决指针威胁的最终方法。

例: int *x=new int();

Int *y=new int();

Int *p=x;

Delete x;

P=NULL;        //或p=y;

 

有一些是个人总结出来的,可能有一些理解上的问题,敬请见谅。

本文允许转载,转载请保留源地址:http://huyanping.sinaapp.com/?p=89

原创文章,转载请注明: 转载自始终不够

本文链接地址: C++经验(个人见解)

转载请注明:始终不够 » C++经验(个人见解)

喜欢 (0)