转载

C++中const详解

感觉自己的时间都在不知不觉中浪费,不漫无目的的瞎耗了,还是认真做自己真正感兴趣的事吧!

 看了别人的许多bolg,学到了挺多的,下面是const的详解(c++primer真是本好书


1.const用于普通的数据类型

 const int a=32;  //对于const类型的数据必须在定义的时候初始化

 const int a;

 a=12;  //too late to initialize


2.const用于指针类型

一:指针指向的内容是常量

int  a=32;

const int *p=&a; //p指向的内容是一个常量,不允许改变

int const *p=&a;  //这个表达式跟上面的一模一样,我比较喜欢上面的那种

*p++;  *p=42; //invalid because pt points to a const int


a=42 //valid 可以变量来改变这个值

int  b=42;

p=&b;  // p指向的内容不变,但这意味着可以让它指向别的变量的地址


二:指针本身是常量

int  a=32;

int * const  p=&a; //p本身是一个常量,不允许改变

int  b=42

p=&b; //invalid  指针p是一个常量,无法指向别的地址

*p++ ,*p=42; //valid 指针不能指向别的地址,但是这意味着我们可以改变它指向的值


三:指针本身和指针所指向的内容都为常量

int  a=32;

const int * const p=&a //p指向的内容和自己本身都不能被更改


3:指针赋值的问题

C++禁止将指向const的地址赋给非const的指针

int  a=32;

const int *p=&a;

int *q=p;  //可以通过改变*q来改变*p的值,it's ridiculous

可以将const的地址赋给const的指针


4:const用于函数中


一:const用于函数的参数

void function(const int a);  //参数的值在函数中不能改变

void function(const int *a);//参数指针所指向的内容在函数中不能改变

void function(int * const a); //参数指针在函数中不能改变

void function(const int &a);  //参数引用在函数中不能改变

void function(const class &A);//参数对象引用也在函数中不能改变


二:const用于函数的返回值

const int * function();

const int *p=function(); //p指向的内容不能改变

int *const  function();

int *const p=function(); //p本身不能被改变


三:const用于函数的末尾

void function(int a,int b) const; 

//这是对于类而言的

//常成员函数,不改变对象的成员变量,也不调用类中任何非const成员函数


4:对于类而言的const


一:如果在类中声明了一个const变量,则只能用初始化列表的方法才能初始化

class A

{

private: const int  a;

public:

A (int x): a(x) { };

}


二:常成员函数

void function(int a,int b) const; //这是对于类而言的

//常成员函数,不改变对象的成员变量,也不调用类中任何非const成员函数


三:const对象

 const  A  a //a中的任何对象度不能被修改,对于对象指针与引用也是一样的

//a中任何非常成员函数都不能调用,因为任何非const成员函数会有修改成员变量的企图


    const的使用注意事项:

要大胆的使用const,这将给你带来无尽的益处,但前提是你必须搞清楚原委;


·要避免最一般的赋值操作错误,如将const变量赋值;


·在参数中使用const应该使用引用或指针,而不是一般的对象实例;


·const在成员函数中的三种用法(参数、返回值、函数)要很好的使用;


·不要轻易的将函数的返回值类型定为const;


·除了重载操作符外一般不要将返回值类型定为对某个对象的const引用;


·任何不会修改数据成员的函数都应该声明为const类型。




正文到此结束
本文目录