关于C++中const修饰的一些备忘.....【2013.10.23】

欢迎加入我们的QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611 

1.关于congst的一些备忘

const 修饰变量:不多说了...

说一下const 修饰指针;
记忆方法就是 看const 往右最先碰到谁,就是修饰谁,谁就是只读的。【忽略类型 int float 类 等】

const int * pint;//*为只读,pint可以修改,即可以修改pint的指向,但是指向的变量需要是const的,即*pint = 123(NO) pint = &otherInt;(OK)

int const *pint;//同上

int *const pint;//*为可变,pint只读,即指向的变量是可变的,但指向的pint已无法修改指向,即*pint = 123 (YES)pint - &otherInt (NO)

const int * const pint;//两者都是只读的 ,即*pint = 123 (NO)pint - &otherInt (NO)

int const * const pint;//同上

const  修饰成员变量:

class A

{

const int m_int;//

}

因为不能在class 中初始化,所以需要在类的初始化列表中赋值。

A():m_int(2)

{

.................

}

当然初始化列表不能接受无序列的初始化。如数组。

const int m_ints[2];//这样的声明在编译器是无法通过的。

const 和函数的重载:

void Func();

void Func() const ;//这是可以的,重载了

void Func(int i);

void Func(const int i);//这是不行的。 

void Func(int &i);

void Func(const int &i);//这样又是可以的

int Func();

const int Func(); //ok的

int & Func();

const int &func();//ok的

之所以 const 形参重载不行,因为传形参,对用户而已是不需要过问的,是透明的,用户不需要知道函数对形参的操作,所以const 与否没有多大意义。同理如果传引用或者指针的话,用户是需要知道函数对参数的操作的,所以const与否是不一样的,因而重载有效。

const 修饰成员函数的时候:

class A

{

......

void  Func(int i) const ;

int m_i;

}

void A::Func(int i) const //这里是const的函数 ,正常情况下是无法做成员的修改的,但是用 强制转换是可以做到的( const_cast )

{

m_i = i;//正确情况是无法编译通过的

const_cast <int > m_i = i;//OK

}


【我的参考出处】


欢迎加入我们的QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611 

你可能感兴趣的:(C++,类,Class)