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

c++ const的使用方法

2016-05-23 16:33 330 查看
c++提供了用户定义常量的概念,const就是为了直接表述“不变的值”这样一个概念。这种东西在一些环境中非常有用,例如,许多对象在初始化之后就不再改变自己的值了;与直接将文字量散布在代码中,采用符号常量写出的代码更容易维护;指针常常是边读边移动,而不是边写边移动;许多函数也是只读不写的。关键字const可以加到一个对象的声明上,将一个对象声明为一个常量。因为不允许赋值,常量就必须进行初始化。例如:

const int model = 90;
//model是个常量;

const int v[] = {1,2,3,4}; //v[i]是个常量;

const int x;
//错误: 没有初始化;

将一些东西声明为常量,就保证了在起作用域内不能改变它们的值:

void f()

{

model = 200;//错误

v[2] ++; //错误

}

请注意, const实际上改变了类型,也就是说,它限制了对象能够使用的方式,并没有描述常量应该如何分配。例如:

void g(const X* p)

{

//在这里面不能修改*p;

}

void h()

{

X val //val可以被修改;

g(&val);

//...

}

编译器可以以多种方式利用一个对象的这一性质,当然,这实际上要看它有多聪明。例如,对于常量的初始式常常是(也并不总是)常量表达式;如果确实是这样,那么这个常量就可以在编译时进行求值。进一步说,如果编译器知道了某const的所有使用,他甚至可以不为该const分配空间。例如:

const int c1 = 1;

const int c2 = 2;

const int c3 = my_f(3); //编译时不知道c3的值;

extern const int c4; //编译时不知道c4的值;

const int *p = &c2;
//需要为c2分配空间;

在这里,编译器能够知道c1和c2的值,所以就可以将这些值用到常量表达式里。由于在编译时无法知道c3和c4的值(仅仅通过这个编译单元中的信息),因此必须为c3和c4分配储存。 又由于c2的地址被取用(而且应该假定他在其他地方用),所以c2也需要分配存储。最简单的常见情况就是常量的值在编译时已知,而且不需要分配存储,c1就属于这种情况。关键字extern说明c4在其他地方定义的。
对于常量数组,典型的情况是需要分配存储,因为一般说编译器无法弄清楚表达式里使用的是数组中的哪些元素。但无论如何,在许多机器上,甚至对这种情况也可以通常把常量的数组放进只读存储器里。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: