const限定符的作用:
1、定义const常量:const可以将一个对象变成一个常量,不可被修改,所以定义的 时候必须进行初始化,例如:
const int bufsize = 512;
2、可以修饰函数的参数、返回值、甚至函数的定义体。被const修改时的东西受到强制保护,可以预防意外的变动,提高程序的健壮性。
- 一般全局作用域中,定义了非const变量,它可以在整个程序中访问;
//file_1.cc int counter; //定义的是非const变量 //file_2.cc extern int counter; //使用file_1.cc文件中的counter变量 ++counter; |
- 如果全局作用域中声明了const变量,则它是定义该对象的文件的局部变量,只存在于那个文件,不能被其他文件访问;
- 将const变量指定为extern,就可以在整个程序中访问const对象了
//file_1.cc extern const int counter = fcn(); //定义的是const变量,并且指定为extern,这里counter就可以作为全局变量使用了 //file_2.cc extern const int counter; //使用file_1.cc文件中的counter变量 ++counter; |
================================================================================================
const与#define的不同:
C++语言可以使用const定义常量,也可以使用#define定义常量,但是前者比后者有更多的优点:
1、 const常量有数据类型,但是宏常量却没有数据类型,所以编译器可以对前者进行类型安全检查而对后者只能进行字符替换;
2、有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。
================================================================================================
在C++中,由const修饰的成员函数的函数体内部,是不能够对成员变量进行修改的。 但是在某些情况下,需要在const函数中改变成员变量。这就需要把成员变量设置成mutable类型,例如:
class C { public: C(int i):m_Count(i){} int incr() const //这里的成员函数incr被指定为const型,所以函数中的变量不能被修改,即m_Count变量不能改变,要是m_Count能够改变,就 需要将m_Count变成mutable型 { return ++m_Count; } private: mutable int m_Count; //主要这里 } |