C++ const
2015-11-28 17:43
232 查看
const用法分类
常成员变量
常成员变量与普通常变量申明类似,区别是常成员变量只能在构造方法参数初始化列表初始化。
const成员函数:用于类数据保护
const成员函数主要用于数据保护,保护类中对象不被修改,可以使用类中所有成员变量,但是不可以修改成员变量的值。常成员函数需要在声明和定义的时候在函数头部的结尾加上 const 关键字
const对象
const对象必须被初始化。
若是new初始化,new返回的指针必须是const类型的
const对象只能访问const成员函数,而非const对象可以访问任意的成员函数;
const对象的成员是不能修改的,而通过指针维护的对象却可以修改的;
常函数参数:避免函数修改传递过来的对象。
void func(const int a); 做为参数使用,说明函数体内是不能修改该参数的;
对不同参数定义时不同的形式,可参见定义变量时使用方式
同理,将指针参数声明为const,函数将不修改由这个参数所指的对象。
函数参数中const 指针,表示不允许将该指针指向其他内容。
常函数返回值
可以阻止用户修改返回值。返回值也要相应的赋值给一个常量或常指针。
常指针有两种类型:
使用
mutable
mutable也是为了突破const的限制而设置的,只能修饰类的非静态数据成员.
使用场景:
需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。
1.1常变量: const 类型说明符 变量名 1.2 常引用: const 类型说明符 &引用名 1.3 常对象: 类名 const 对象名(实参) / const 类名 对象名(实参) 1.4 常成员函数: 类名::fun(形参) const 1.5 常数组: 类型说明符 const 数组名[大小] 1.6 常指针: const 类型说明符* 指针名 ,类型说明符* const 指针名 1.7 常函数参数: void Fun( const A *in); //修饰指针型传入参数 void Fun(const A &in); //修饰引用型传入参数 1.8 常函数返回值 const 类名:fun(形参)
常成员变量
常成员变量与普通常变量申明类似,区别是常成员变量只能在构造方法参数初始化列表初始化。
const int a =10 等价于 int const a = 10: 指定a是一个常变量 const int *a=&b const修饰的是 *a,故这里表示指针指向的内容*a不能变(不能给*a赋值),但是指针a是可以变的(可以给a赋值为别的地址)。 int const *a=&b 与上面的功能相同 int * const a = &b: const修饰的是指针a,也就是这里定义了一个常指针,指针本身的值不可以 改变(不可以给指针赋值为别的地址),但是指向的内容*a可以改变(可以给*a赋值别的数据)。 const int * const a = &b 指向常数据的常指针,既不可以给*a赋值,也不可以给a赋值。 const int &a=100 常数引用,即不能改变引用的值。
const成员函数:用于类数据保护
const成员函数主要用于数据保护,保护类中对象不被修改,可以使用类中所有成员变量,但是不可以修改成员变量的值。常成员函数需要在声明和定义的时候在函数头部的结尾加上 const 关键字
class Test { public: char *name; char *getName() const; } //防止外部修改name的值,故定义为const,只为获取值。 char* Test::getName() const { return name; }
const对象
const对象必须被初始化。
若是new初始化,new返回的指针必须是const类型的
const对象只能访问const成员函数,而非const对象可以访问任意的成员函数;
const对象的成员是不能修改的,而通过指针维护的对象却可以修改的;
class Test { public: string name; Test(string name); string getName() const; void setName(string name); void setName(string name) const; //此方法为上一方法的重载 }; string Test::getName() const { return name; } Test::Test(string name){ this->name = name; } void Test::setName(string name){ this->name = name; } void setName(string name) const { this->name = name;//报错,未定义的=:常成员函数不能修改成员变量。 } int main() { using namespace std; const Test test("xiaoM"); cout<<test.getName()<<endl; //test.setName("aaa"); //编译错误:常成员对象无法调用非常成员函数 }
常函数参数:避免函数修改传递过来的对象。
void func(const int a); 做为参数使用,说明函数体内是不能修改该参数的;
对不同参数定义时不同的形式,可参见定义变量时使用方式
同理,将指针参数声明为const,函数将不修改由这个参数所指的对象。
函数参数中const 指针,表示不允许将该指针指向其他内容。
常函数返回值
可以阻止用户修改返回值。返回值也要相应的赋值给一个常量或常指针。
常指针有两种类型:
const 类型说明符* 指针名等同于
类型说明符 const* 指针名:
指针名不能指向别的内存地址,但可以修改其指向的内存地址的内容。
类型说明符* const 指针名:
*指针名的内容不可以改变,但
指针名可以指向别的字符串
使用
定义const常量 方便编译器进行类型检查 保护被修饰的内容,避免意外修改 节省空间 提高效率
mutable
mutable也是为了突破const的限制而设置的,只能修饰类的非静态数据成员.
使用场景:
需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。
相关文章推荐
- c++ primer 11 泛型算法
- c++ primer 10 关联容器
- C++实现 搜狗实验室新闻语料抽取
- c++ primer 9 顺序容器
- 关于C++中结构体及其指针成员的内存分配和释放
- c++ primer 8 标准IO库
- c++ primer 7 函数
- c++11 线程池系列之一 所需要的join_threads
- c++11 线程池系列之一 所需要的thread_safe_queue
- c++11 线程池系列之一 最简单的线程池
- 《C++ primer》英文第五版阅读笔记(二十一)——简单语句,语句范围和条件语句
- C++ 文件读取操作时,使文件指针重新指向文件开头
- 经典排序算法(四)希尔排序---C++
- 2013蓝桥杯C语言B 带分数(16`)
- iOS C语言 分支结构 循环结构
- 151128libc++abi.dylib: terminate_handler unexpectedly threw an exception错误
- C++实现最小堆及插入,调整顺序,删除堆顶元素的操作
- C++实现最小堆及插入,调整顺序,删除堆顶元素的操作
- iOS C语言 变量 综合运算符
- C语言之指针