const的用法和注意事项:
①:被const修饰的变量可以阻止这个变量被改变,被const修饰的变量要进行初始化。
②:可以指定const指针也可以将指针指向的变量指定为const;
③:被const关键字修饰的形参的值在函数内部不能被改变;
④:const修饰的成员函数不能修改任何的成员变量(mutable修饰的变量除外);const成员函数不能调用非const成员函数,因为非const成员函数可能会修改成员变量。
⑤:const可以修饰函数返回值,使之不能被改变。
define和const的区别
①:const定义的常数是变量,也带类型,#define定义的只是个常数,不带类型。
②:define在预处理阶段进行替换;const在编译时确定其值;
③:define只进行简单的字符串替换,没有类型检查;而const由对应的数据类型,编译时会进行类型检查。
④:define定义的变量在预处理后存放在代码段的空间里,const修饰的变量占用数据段空间。
⑤:宏定义的作用范围仅限于当前文件,const对象使用extern声明后可以在多个文件之间共享。
const成员函数和非const成员函数的区别
①:const和非const函数是可以构成重载的,但是仅凭返回值是否为const是无法构成重载的。
②:若将成员函数声明为const,则该函数不允许修改类的数据成员。值得注意的是,把一个成员函数声明为const可以保证这个成员函数不修改数据成员,但是,如果据成员是指针,则const成员函数并不能保证不修改指针指向的对象,编译器不会把这种修改检测为错误。
③:const成员函数可以被具有相同参数列表的非const成员函数重载。
④:const成员函数可以访问非const对象的非const数据成员、const数据成员,也可以访问const对象内的所有数据成员,但不能修改任何变量;非const成员函数可以访问非const对象的数据成员、const数据成员,但不可以访问const对象的任意数据成员。
⑤:const成员函数只能用于非静态成员函数,不能用于静态成员函数。
C++ const和static类中使用要注意的
①:static数据成员的初始化必须在类外初始化;const数据成员必须在构造函数初始化列表中进行初始化,因为类成员不能声明初始化,同时const成员不能在成员函数中赋值,因为const不能被改变。
②:const成员函数不能改变任何一个数据成员的值,但是可以改变static成员的值。