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; //主要這裡 }