C++基础概念:const关键字

C++基础概念:const关键字const定义常量与define的区别:const是有类型的,可以做类型检查;const T 类型的常变量和 const T & 类型的

大家好,欢迎来到IT知识分享网。

1) 定义常量

有时候我们希望定义这样一种变量, 它的值不能被改变。

为了满足这一 要求, 可以用关键字 const 对变量的类型加以限定。

const对象一旦创建后其值就不能再改变,所以const对象必须在定义的时候就初始化。

初始值可以是任意复杂的表达式。

与非const类型所能参与的操作相比,const 类型的对象能完成其中大部分;

主要的限制就是只能在 const 类型的对象上执行不改变其内容的操作

// const int max ; //error: uninitialized const 'max' const int max = 100 ; cout << max << endl ; int j = max ; cout << j << endl ; // max = j ; //error: assignment of read-only variable 'max'

const定义常量与define的区别:

const是有类型的,可以做类型检查;define只是替换,是没有类型检查的,容易出错。

所以在C++推荐的做法是使用const,不推荐使用define

2) 定义常量指针

const T *用于定义常量指针。

不可通过常量指针修改其指向的内容

 int n = 4 ; const int *p = &n ; // *p = 5 ; // error: assignment of read-only location '* p'

常量指针指向的位置可以变化

 int n = 4 ; const int *p = &n ; n =5 ; int m = 6 ; p = &m ; cout << *p << endl ;

不能把常量指针赋值给非常量指针,反过来可以

 int n = 4 ; const int *p = &n ; n =5 ; int m = 6 ; p = &m ; int * p2 = &n ; p = p2 ; // no error cout << *p << endl ; // p2 = p ; //error: invalid conversion from 'const int*' to 'int*'

3) 定义常引用

不能通过常引用修改其引用的变量

 const int &r = m ; cout << r << endl ; // r = n ; //error: assignment of read-only reference 'r'

const T 类型的常变量和 const T & 类型的引用则不能用来初始化 T & 类型的引用

T &类型的引用 或 T类型的变量可以用来初始化 const T & 类型的引用。

 int & r = m ; const int &t = r ; // int & y = t ; // error: binding reference of type 'int&' to 'const int' discards qualifiers 

参考代码:

#include <iostream> #include <cstdio> using namespace std; int main () { // const int max ; //error: uninitialized const 'max' const int max = 100 ; cout << max << endl ; int j = max ; cout << j << endl ; // max = j ; //error: assignment of read-only variable 'max' int n = 4 ; const int *p = &n ; // *p = 5 ; // error: assignment of read-only location '* p' cout << *p << endl ; n =5 ; cout << *p << endl ; int m = 6 ; p = &m ; cout << *p << endl ; int * p2 = &n ; p = p2 ; cout << *p << endl ; // p2 = p ; //error: invalid conversion from 'const int*' to 'int*' int & r = m ; const int &t = r ; cout << t << endl ; // t = n ; //error: assignment of read-only reference 't' // int & y = t ; // error: binding reference of type 'int&' to 'const int' discards qualifiers return 0 ; }

输出结果:

g++ const_pointer.cpp ./a.out 100 100 4 5 6 5 6 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/48872.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信