您的位置:首页 > 编程语言 > C语言/C++

C++常见用法规范整理

2014-01-15 17:25 232 查看
一、表达式和基本语句

1、与零或空的比较:

bool:if(flag) if(!flag)

int:if(flag == 0) if(flag != 0)

float:if(flag > -a && flag < a) 可以定义float a = 0.00001(允许误差) 不能将float与0直接比较,因为精度不同。

指针:if(flag == NULL) if(flag != NULL)

2、for循环中,长循环放在最内层,可以减少cpu跨切循环的次数,循环应避免使用半开半闭区间。

for(int i=0; i<5; ++i)

{

for(int j=0; j<100; ++j)

{

........

}

}

3、逻辑判断放在循环外面,不可以打断循环流水线。

if(flag)

{

for(int i=0; i<100; ++i)

{

......

}

}

二、常量

1、const系统会自动进行安全检查,#define不会,容易产生边际效应。

在类中要使用常量,用枚举比较好,枚举不能有浮点型数据。

class A{

enum {SIZE = 100};

int array[SIZE];

};

三、函数

1、C语言无返回类型的函数会被默认成int,C++必须有返回类型。

2、return不能返回指向栈内存的指针或引用,因为函数执行完的时候自动销毁。

3、引用在创建的时候必须被初始化,不能为NULL,之后引用对应的值可以改,但是对象就不能改了。

int i = 1;

int &k = i;

fun(&k);

四、内存管理

1、内存分配方式有三种:静态存储区,栈,堆(动态内存)。

静态存储区上的变量在程序运行周期内都存在,比如static,全局变量。

堆上分配的内存也叫动态内存,new出来的,必须自己delete,防止内存泄露,delete会把指针变为野指针,所以必须delete p; p = NULL; 他的生存周期特别灵活,需要我们手动操作。

栈上分配的内存函数的局部变量都在栈上分配内存,在函数执行结束的时候自动释放,使用效率高,但分配内存容量有限。

2、指针

以指针作为参数的函数必须在函数口进行非空检查,防止空指针if(p != NULL)

指针释放后必须p = NULL,否则就是野指针。

3、定义数组的时候尽量初始化,防止为被初始化就是用。

4、不要用指针传递动态内存,用函数返回值来传递。

char* get(int n)

{

char* p = (char*)mallo(sizeof(char* n));

return p;

}

char* str = NULL;

str = get(100);

5、野指针

free和delete释放指针后,指针会变为野指针,所以一定要有NULL;

delete p;

p = NULL;

6、指针创建时要么初始化,要么NULL;

*p= &a; 或者 *p = NULL;

7、内存耗尽怎么办

A* a = new A();

if(a == NULL)

{

exit(1); //终止整个程序;

}

8、new数组

Obi* object = new Obj[100]; //创建100个动态对象

delete[] object; //释放所有对象

9、字符串

char* p = "hello"; //p指向常量字符串,位于静态存储区,内容为:hello\0

p[0] = 'a'; //是非法的 ,但编译器不会发现这个错误

char* a[] = "hello";

a[0] = 'w' //合法

10、全局函数在调用的时候要加::标示符

::fun();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: