C++中const关键字的使用

转载 2007年09月23日 15:57:00
这是以前别人发的const使用总结,你可以参考下
-----------------------------------------------------------------------
C++中const总结
一:对于基本声明
   1.const int r=100;
   //标准const变量声明加初始化,因为默认内部连接所以必须被初始化,其作用域
   为此文件,编译器经过类型检查后直接用100在编译时替换.
   2.extend const int r=100;
   //将const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行
   初始化,仅仅作为声明,编译器认为在程序其他地方进行了定义.
   3.const int r[]={1,2,3,4};
   struct S {int a,b;};
   const S s[]={(1,2),(3.4)};
   //以上两种都是常量集合,编译器会为其分配内存,所以不能在编译期间使用其中
   的值,例如:int temp[r[2]];这样的编译器会报告不能找到常量表达式
二:对于指针
   1.const int *r=&x;
   //声明r为一个指向常量的x的指针,r指向的对象不能被修改,但他可以指向任何
   地址的常量.
   2.int const *r=&x;//与用法1完全等价,没有任何区别。
   3.int * const r=&x;
   //声明r为一个常量指针,他指向x,r这个指针的指向不能被修改,但他指向的地址
   的内容可以修改.
   4.const int * const r=&x;
   //综合1,3用法,r是一个指向常量的常量型指针.
三:对于类型检查
   可以把一个非const对象赋给一个指向const的指针,因为有时候我们不想从这个
   指针来修改其对象的值,但是不可以把一个const对象赋值给一个非const指针,
   因为这样可能会通过这个指针改变指向对象的值,但也存在使这种操作通过的合
   法化写法,使用类型强制转换可以通过指针改变const对象:
   const int r=100;
   int *ptr=const_cast<int*>(&r);//C++标准,C语言使用:int* ptr =(int*)&r;
四:对于字符数组
   如char * name = "china";
   这样的语句,在编译时是能够通过的,但是"china"是常量字符数组,任何想修改
   他的操作也能通过编译但会引起运行时错误,如果我们想修改字符数组的话就要
   使用char name[]="china";这种形式.
五:对于函数
   1.void Fuction1(const int r);
   //此处为参数传递const值,意义是变量初值不能被函数改变
   2.const int Fuction1(int);
   //此处返回const值,意思指返回的原函数里的变量的初值不能被修改,但是函数
   按值返回的这个变量被制成副本,能不能被修改就没有了意义,它可以被赋给任何
   的const或非const类型变量,完全不需要加上这个const关键字.但这只对于内部
   类型而言(因为内部类型返回的肯定是一个值,而不会返回一个变量,不会作为左
   值使用),对于用户自定义类型,返回值是常量是非常重要的,见下面条款3
   3.Class CX; //内部有构造函数,声明如CX(int r =0)
   CX Fuction1 () { return CX(); }
   const CX Fuction2 () { return CX(); }
   如有上面的自定义类CX,和函数Fuction1()和Fuction2(),我们进行如下操作时:
   Fuction1()=CX(1); //没有问题,可以作为左值调用
   Fuction2()=CX(1); //编译错误,const返回值禁止作为左值调用.因为左值
              把返回值作为变量会修改其返回值,const声明禁止这种修改.
   4.函数中指针的const传递和返回
   int F1 (const char * pstr);
   //作为传递的时候使用const修饰可以保证不会通过这个指针来修改传递参数的
   初值,这里在函数内部任何修改*pstr的企图都会引起编译错误.
   const char* F2();
   //意义是函数返回的指针指向的对象是一个const对象,它必须赋给一个同样是指
   向const对象的指针.
   const char* const F3();
   //比上面多了一个const,这个const的意义只是在他被用作左值时有效,它表明这
   个指针除了指向const对象外,它本身也不能被修改,所以就不能当作左值来处理.
   5.函数中引用的const传递
   void F1 (const X& px);
   //这样的一个const引用传递和最普通的函数按值传递的效果是一模一样的,他禁
   止对引用的对象的一切修改,唯一不同的是按值传递会先建立一个类对象的副本,
   然后传递过去,而它直接传递地址,所以这种传递比按值传递更有效.
   另外只有引用的const传递可以传递一个临时对象,因为临时对象都是const属性,
   且是不可见的,他短时间存在一个局部域中,所以不能使用指针,只有引用的const
   传递能够捕捉到这个家伙.
六:对于类
   1.首先,对于const的成员变量,只能在构造函数里使用初始化成员列表来初始化,
   试图在构造函数体内进行初始化const成员变量会引起编译错误.初始化成员列表
   形如:X::X(int ir):r(ir){} //假设r是类X的const成员变量
   2.const成员函数.提到这个概念首先要谈到const对象,正象内置类型能够定义
   const对象一样(const int r=10;),用户自定义类型也可以定义const对象
   (const X px(10);),编译器要保证这个对象在其生命周期内不能够被改变.如果
   你定义了这样的一个const对象,那么对于这个对象的一切非const成员函数的调
   用,编译器为了保证对象的const特性,都会禁止并在编译期间报错.所以如果你想
   让你的成员函数能够在const对象上进行操作的话,就要把这个函数声明为const
   成员函数.
   假如f()是类中的成员函数的话,它的声明形如:
   int f()const;
   //const放在函数的最后,编译器会对这个函数进行检查,在这个
   函数中的任何试图改变成员变量和调用非const成员函数的操作都被视为非法
   注意:类的构造和析构函数都不能是const函数.
   3.建立了一个const成员函数,但仍然想用这个函数改变对象内部的数据.这样的
   一个要求也会经常遇到,尤其是在一个苛刻的面试考官那里.首先我们要弄清楚考
   官的要求,因为有两种方法可以实现,如果要求不改变原来类的任何东西,只让你从
   当前这个const成员函数入手,那么你只有使用前面提到的类型强制转换方法.实例
   如下:
   //假如有一个叫做X的类,它有一个int成员变量r,我们需要通过一个const成员函
   数f()来对这个r进行++r操作,代码如下:
   void X::f()const
   {const_cast<X*>(this)->++r; } //通过this指针进行类型强制转换实现
   另外一种方法就是使用关键字:mutable.
   如果你的成员变量在定义时是这个样子的:mutable int r;
   那么它就告诉编译器这个成员变量可以通过const成员函数改变.编译器就不会再
   理会对他的检查了
 

c++中使用const关键字的联系区别

1、void fun() const{}; const void fun(){}; 和void const fun(){}; 的区别? 答:const void fun(){};和void cons...

c++笔记 const关键字的使用

1.关于const指针     如果关键字const出现在星号左边,表示被指物为常量;如果出现在星号右边,表示指针自身是常量;如果出现在星号两边,表示被指物和指针两都都是常量。     注意被指物...
  • gavinr
  • gavinr
  • 2012年04月08日 22:33
  • 675

C++ const关键字的使用知识点总结

const的使用const声明一个常量在C++中,有变量和常量之分,常量在程序运行中不允许被改变,主要有两种声明方式。 const关键字 const double PI=10;//声明了一个P...

C++ 关键字的使用(const static explict reinterpret_cast)

1  volatile 有些变量是用volatile关键字声明的。当两个线程都要用到某一个变量且该变量的值会被改变时,应该用volatile声明,该关键字的作用是防止优化编译器把变量从内存装入CPU...

C++中const关键字的作用

C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。 Const 是C++中常用的类型修饰符,常类型是指使用...

C++中const关键字的用法

Const,Const函数,Const变量,函数后面的Const   看到const 关键字,C++程序员首先想到的可能是const 常量。这可不是良好的条件反射。如果只知道用const 定义常量...

C++中的const关键字的用法

const与指针搭配使用       首先必须弄清楚两个基础概念:指针常量和常量指针       指针常量:即指针本身的值是不可改变的,而指针指向的变量的值是可以改变的.(指针指向固定的内存地址不...

C++带const、static和#define关键字的变量定义的区别

一、const  1.变量定义中    (1)const int a=10;    说明:定义的int型变量a不能被修改,只能被使用。带const关键字的变量可以定义为全局变量,但此时定义的全局...

关于C++ const关键字的全面总结

转载地址:http://www.kuqin.com/shuoit/20141114/343223.html Const是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型...

C/C++中static和const关键字的作用总结

static 关键字至少有下列 n 个作用:   (1)函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次,因此其值在下次调用时 仍维持上次的值;   ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++中const关键字的使用
举报原因:
原因补充:

(最多只允许输入30个字)