
const限定符const对象一旦创建其值就不能在修改故const对象必须初始化。const的引用常量引用指的是对常量的引用对常量的引用不能被用作修改它所绑定的对象。Q: int const 和 const int有什么区别?A: 两种语法都表示这是一个int型的常量引用不能通过该引用去修改它们绑定的int型变量。const的指针谨记一条规则阅读时从左向右读围绕着 const 和 * 进行阅读const char *p tmp; //常量指针或char const *p tmp;char * const p tmp; //指针常量常量指针指向常量的指针其所指对象的内容不能改变。指针常量指针自身是一个常量其值不能别修改即不能再指向其他的对象。把*放在const关键字之前用以说明指针是一 个常量即不变的是本身的值而非指向的那个值。指向常量的常量指针指针本身和指针所指向的值都不能改变。顶层const和底层const顶层const指针本身是一个常量int i 0; int *const p i; 指针常量底层const指针所指向的对象是一个常量const int i 0; const int *p i; 常量指针const放在函数前面和后面的区别const放在函数的前面表示返回值为constconst放在函数的后面表示函数不可以修改class的成员在该函数内不能修改类的数据成员变量以及不能调用该类内部的非常量成员函数。1、非静态成员函数后面加const加到非成员函数或静态成员后面会产生编译错误2、唯一的例外是对于mutable修饰的成员。加了const的成员函数可以被非const对象和const对象调用 。但非const的成员函数只能被非const对象调用。3、表示成员函数隐含传入的this指针为const指针(常量指针指针所指向的对象不能改变)决定了在该成员函数中 任意修改它所在的类的成员的操作都是不允许的( 因为隐含了对this指针的const引用 )。constexprc11新标准增加的关键字。1. 修饰变量时给该常量赋初值的一定是一个常量否则编译器会报错。int val 100; constexpr int a val; //此时编译器会报错2.修饰函数时要求函数返回值必须是常量否则编译器会报错。constexpr int func() { int tmp 100; return tmp; //此时编译器会报错 }