我们知道声明 int
a=1;可以做a++这样的操作,在这个过程中,a是不断变化的。指针同样也可以,因为指针是一个变量。但是如果是数组名就不可以了,因为数组名是一个常量。

常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。因此,定义或说明常类型时必须进行初始化。

例如:

概述

int a=1;

  1. const有什么用途?

a++;

在 c程序中,const的用法主要有定义常量、修饰函数参数、修饰函数返回值等3个用处。

这是正确的;

在c++程序中,它还可以修饰函数的定义体,定义类中某个成员为常态函数,即不改变类中的数据成员。

int
*p=&a;

被const修改的东西都要受到强制保护,可以预防意外的变动,能提高程序的健壮性。

cout<<*(p++)<<endl;

  1. const与#define相比有什么不同?

这也是正确的;但是

它们都可以用来定义常量,但const比#define有更多优点:

int
a[10];

(1)
const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换中可能会产生意料不到的错误(边际效应)。

cout<<*(a++)<<endl;

(2) 在c++中使用const常量而不使用宏常量,即const常量完全取代宏常量。

这是错误的,因为数组名a在不断的变化,但他是一个常量。但是可以改为:

 

int
a[10];

 

int i;

C++中的Const

for(i=0;i<10;i++)

 

cout<<*(a+i)<<endl;

一,一般常量和对象常量

我们再来看一个例子。

  1. 一般常量
  一般常量是指简单类型的常量。这种常量在定义时,修饰符const可以用在类型说明符前,也可以用在类型说明符后。如:
  int const x=2;
  或
  const int x=2;
  定义或说明一个常数组可采用如下格式:
  <类型说明符> const <数组名>[<大小>]…
  或者
  const <类型说明符> <数组名>[<大小>]…
  例如:
  int const a[5]={1, 2, 3, 4, 5};

#include<iostream.h>

  2. 常对象
  常对象是指对象常量,定义格式如下:
  <类名> const <对象名>
  或者
  const <类名> <对象名>
  定义常对象时,同样要进行初始化,并且该对象不能再被更新,修饰符const可以放在类名后面,也可以放在类名前面。

const int N=6;

二,常指针和常引用

void print(const int *p,int n);

  1. 常指针
  使用const修饰指针时,由于const的位置不同,而含意不同。如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。(如果const在*的左边,则被指物为常量;在右边,则指针为常量)下面举两个例子,说明它们的区别。
  下面定义的一个指向字符串的常量指针:
  char * const prt1 = stringprt1;
  其中,ptr1是一个常量指针。因此,下面赋值是非法的。
  ptr1 = stringprt2;
  而下面的赋值是合法的:
  *ptr1 = “m”;
  因为指针ptr1所指向的变量是可以更新的,不可更新的是常量指针ptr1所指的方向(别的字符串)。
  下面定义了一个指向字符串常量的指针:
  const * ptr2 = stringprt1;
  其中,ptr2是一个指向字符串常量的指针。ptr2所指向的字符串不能更新的,而ptr2是可以更新的。因此,
  *ptr2 = “x”;
  是非法的,而:
  ptr2 = stringptr2;
  是合法的。
  所以,在使用const修饰指针时,应该注意const的位置。定义一个指向字符串的指针常量和定义一个指向字符串常量的指针时,const修饰符的位置不同,前者const放在*和指针名之间,后者const放在类型说明符前。

void main()

  2. 常引用
  使用const修饰符也可以说明引用,被说明的引用为常引用,该引用所引用的对象不能被更新。其定义格式如下:
  const <类型说明符> & <引用名>
  例如:
  const double & v;
  在实际应用中,常指针和常引用往往用来作函数的形参,这样的参数称为常参数。

{

  在c++面向对象的程序设计中,指针和引用使用得较多,其中使用const修饰的常指针和常引用用得更多。使用常参数则表明该函数不会更新某个参数所指向或所引用的对象,这样,在参数传递过程中就不需要执行拷贝初始化构造函数,这将会改善程序的运行效率。

网站地图xml地图