c++的const详解

来源:互联网 发布:淘宝衣服男装 编辑:程序博客网 时间:2024/05/16 01:11
有时候我们需要一个一个变量,并且这个变量的值不可以改变,c++语言就提供了这么一个关键字,他就是const。


一旦你把一个变量的声明成了const以后,以后任何试图改变const变量的操作都会被编译器认为是错误的,但是const变量一定要在对开始定义的时候初始化,没有初始化的const变量是非法的,用常量初始化或者是变量初始化都可以,只要它可以转换成为const声明的变量类型。


例如:
const int a;是错误的,因为他没有初始化。


注意,默认情况下,const仅仅是在文件内部有效,如果希望一个变量在几个文件内部都有效的话,需要在定义的时候加上extern关键字。


const关键字也经常和引用在一起使用,把引用绑定到const对象上,就是对常量的引用,与其他的非常量引用不一样的地方是,常量引用不允许改变变量的值。


const int &a = b;
就是a是一个常量引用,但是a不可以改变b,但是b自身可以改变。
此外,非常量引用不可以指向常量引用,如果可以的话,非常量引用就可以改变常量引用的值了。例如
const int a = 1;
const int &b = a;//正确
int &c = b;//错误


非常量引用的类型必须和引用对象的类型一致。但是常量引用允许初始值不是对应类型的,只要可以转换成为即可。和引用一样,非常量指针也不可以指向常量。


顶层const和底层const


这两个概念很重要的,如果弄不懂的话,以后的路就不好走了,这一点深有体会。对于指针来说,指针指向的值是一个常量是一个底层const,指针是一个常量是一个顶层const。进一步扩展的话,顶层const就代表所有的对象是常量,用于声明的引用的const全部都是底层const。


在执行拷贝操作的时候,顶层const还是底层const有很大的区别,如果是顶层const的话,对拷贝没什么影响,但是如果是底层const的话,就会有诸多的限制。拷贝的左值和右值必须有相同的底层const,或者两者可以转换,否则编译器认为是失败。

0 0
原创粉丝点击