代码改变世界

[C++ 笔记] const的用法

2011-09-13 12:30  Firefly727  阅读(251)  评论(0编辑  收藏  举报

const的用法有以下几种:

① 修饰全局变量时,表明它是一个常量,作用域在有static修饰的时候是本文件的作用域,如果没有static修饰的时候作用域是全局的;(#define宏定义的区别⑴ const定义的常量需要进行静态类型安全检查,而#define定义的常量只是在编译预处理时期,直接进行文本替换,没有类型检查。⑵ 有些编译器可以对const定义的常量进行调试,而#define不会进行调试。⑶ const定义常量不会出现边际效应,而#define的边际效益经常发生)

② 修饰局部变量时,同①;只是作用域变成了函数局部变量了;

例子:

const int Asize =100;

const int data[] = {1,2,3,4,5};

const struct cir c1 = {1,2,3};

// 分别表示整型变量Asize、数组data以及结构体c1不能够再改变

③ 修饰指针

⑴ 将指针所指向的对象定义成常量但指针不是常量;[const没有越过*]

const <类型>  *指针名 初始值;

<类型> const  *指针名 初始值

[例子]

const char *pStr = "abcd"; 或者char const* pStr = "abcd"

pStr[2] = 'c';  //出错;

pStr = "cdef"; // OK

⑵ 将指针定义为常量而指针指向的对象不是常量;  [const越过*]

<类型> *const 指针名 初始值;

[例子]

Char * const pStr = "abcd";

pStr = "defa";  //出错

pStr[2] = 'd';   // OK

⑶ 将指针以及指针指向的对象都定义为常量;   [*号两边都有const]

Const <类型> * const 指针名 初始值;

Const char * const pStr = "abcd";

pStr = "dewfe"; // 出错

pStr[2] = 'd'; // 出错

④ const修饰函数的形参

   表明在该函数中不能够改变该参数的值;具体要试形参的类型类看,如果形参是基本类型的变量,那同const修饰变量的用法,如果形参是指针,那同const修饰指针的用法;

⑤ const修饰函数的返回值

   主要用于防止用户将一个函数的返回值作为表达式的左值来使用;比如const char*strCopy(char *dest, const char *src); 函数返回一个const的指针,那么我就不能够这样用了 strCopy(pStr, "abd") = "abcd";//出错

⑥ 类常量成员函数

   将const用来类的成员函数形参表()与函数体{}之间的const.[与类的成员函数返回const类型值区别]

   主要表明该成员函数不能够修改调用该成员函数的对象的成员变量。[类常量成员函数不能够定义为static,即不能够定义为static int getX()cosnt{}; 因为static函数是属于类的,它能够修改的参数只有自己的形参、类的静态成员变量以及全局变量,而这三者都不属于一个类的对象的,所以一个类的常量成员函数没有必要定义为static,而定义为static时,编译器会报错]

比如:

class test {

public:

  int getX()const {

return m_x;

}

private:

  int m_x;

};