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,或者两者可以转换,否则编译器认为是失败。
一旦你把一个变量的声明成了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
- c/c++ const的详解
- C 语言的关键字 const详解
- const用法详解 (C++)
- C语言const详解
- C语言const详解
- C/C++ const详解
- C/C++ const 详解
- C语言--const详解
- c/c++ const详解
- C:const 关键字详解
- C++中const详解
- 详解C++const关键字
- C++const详解
- C/C++static、const详解
- C/C++中const详解
- C/C++中const详解
- C/C++中const详解
- c/c++中const详解
- 从问题看本质: 研究TCP close_wait的内幕
- 解决MAC上使用Jenkins各种命令找不到的问题
- c++的vector容器
- 迭代器
- SPDY 是什么?如何部署 SPDY?
- c++的const详解
- 黑马程序员_08_继承_接口
- c++的this指针
- 安装交叉编译工具,执行arm-linux-gcc –v命令出现提示找不到该文件或目录?解决方法
- c++的参数传递
- java网络编程---udp
- c++类的构造函数
- 编程是不是青春饭?
- coherence(1)搭建