您的位置:首页 > 编程语言 > C语言/C++

C++:const用法总结

2016-10-08 19:14 225 查看
01 const修饰普通变量和指针
语法:
>>const type value;
>>type  const value;
示例1:
const int a;      // 普通变量
int   const a;
示例2:
int * const p;    // (int *)p不可变
const (int *) p;  // (int *)p不可变

const int * p;    // (*p)不可变
int const * p;    // (*p)不可变

02 const修饰函数参数
功能:
函数体不能修改参数本身或者参数其中包含的值)
示例1:
void func(const int val);   // 传递过来的入参不可变;因为是值传递,会重新分配内存空间,对此内存块操作,所以此处无意义;
void func(const int * val); // (*val)不可变
void func(int * const p);   // p不可变

示例2:
void func(const type& val);  // 引用参数在函数内不可变;

03 const修饰函数返回值
功能:修饰返回的变量不可变;

示例1:
const int func();
示例2:
const int * func();
>>const int * p = func();   // (*p)不变

int * const func();
>>int * const p = func();   // p不变

04 const修饰对象/对象指针/对象引用
功能:
此为常量对象,其中的任何成员都不能被修改;
//注:const修饰的对象,该对象的任何非const成员函数不能被调用,因为任何非const成员会有修改成员变量的企图;

示例:
class A
{
void func1();
void func2() const;
};

>>const A a;
>>a.func1();    // wrong
>>a.func2();    // ok

05 const 修饰成员变量
功能:
const修饰的成员变量,表示成员常量,不能被修改,同时它只能在初始化列表中赋值;

示例:
class A
{
private:
const int m_val;   // 成员常量,不能被修改;
public:
A(int a):m_val(a){ // 只能在初始化列表中赋值
}
};

06 const修饰成员函数
功能:常成员函数,不能改变任何对象的成员变量,也不能调用类中任何非const成员函数。

注:对于const类对象/指针/引用,只能调用类的const成员函数,因此,const修饰成员函数的重要作用就是限制于const对象的使用.

07 const常量与define宏定义的区别
(1) 编译器处理方式不同
define宏在预处理阶段展开
const常量在编译运行阶段使用
(2) 类型和安全检查不同
define宏没有类型,不做任何类型检查,仅仅是展开
const常量有具体的类型,在编译阶段会执行类型检查
(3) 存储方式不同
define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存
const常量会在内存中分配(可以是堆中也可以是栈中)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++