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 * constr = & 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<<"啊?”<
const int * const i = & j ;
这段代码有两个const。第一个修饰 * i,被称为底层const。 第二个修饰 i,被称为顶层const。