欢迎加入我们的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