const的几种用法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/timerzip/article/details/78402092

const的几种用法

一、在变量中的应用

const int i = 0;
int const i= 0;

这两种用法相同,声明的同时需要初始化。

extern const int i = 0;
extern const int i ;

C++ 将const 变量的作用域设置为一个文件内。如 tall.cpp中的const int i;不能被 high.cpp 直接调用。但有时想要让 tall.cpp 中的const int i 被其他文件调用。那么就需要加上extern关键字,如第一条语句所示。而 high.cpp 想要调用 tall.cpp中的 const int i,则需要在文件中做出声明,如第二条语句所示。

二、在引用、指针中的应用

int i = 0;
const int j = 0;
const int & k = i;  //常量引用,引用非常量。
const int & k = j;  //常量引用,引用常量。
int & k = j;           //这条语句是错误的,因为 j 为常量,而 k 为非常量引用,可能会修改 j 的值。

const int & 这种形式叫做对“常量引用”,它是“对const的引用”的简称。它引用的对象可以是常量,也可以是非常量。注意:常量引用可以引用非常量、常量。而非常量引用只能引用非常量。

int i = 0;
int * k = & i ;
const int * j = & i ;    //可以理解为 const 修饰 * j ,即 * j是一个常量。而 j 可以指向不同的变量,也就是 j 可以修改 可以赋值。
j = k;                     //正确的。
* j = 1;                  //错误的。
int * const  r = & i;   //可以理解为const修饰 r ,即 r 永远指向 i 。而* r 所代表的值是可以改变的。
*r = 5;                   //正确的。
r = k;                     //错误的。

那么,你能否根据上述内容理解这条语句呢:const int * const j = & i;

三、const成员函数

看以下代码:
const Stock land = Stock( " canshu " );
land.show();

这段代码定义了Stock类的一个对象land。由于land是一个常量对象,所以show()是不能够修改land值的。那么如何正确声明show()呢?

下面是常见的一种声明普通函数的方法:
int sum ( const int a, const int b )
{
     return a+b;
}
函数参数表中,含有两个const 形参:const int a, const int b。这两个const的存在使得sum函数只能使用a,b的值而不能修改。

类似的,我们可以定义show()函数。但是从show()的调用方式 land.show() 可以看到,show()是没有形参的。怎么办呢?其实show()的形参就是land ,那么我们要如何使用const呢?看下面代码:
void Stock::show() const{   cout<<"啊?”<<endl; }

此处的const就是表示show()只是调用land的数据而不进行修改。

四、顶层const与底层const

const int * const i = & j ;

这段代码有两个const。第一个修饰 * i  ,被称为底层const。 第二个修饰 i,被称为顶层const。


展开阅读全文

没有更多推荐了,返回首页